Zum Inhalt springen

sdk/ios

Swift-SDK für iOS und macOS mit ASWebAuthenticationSession,PKCE-S256-Autorisierungscode-Flow und Keychain-Token-Speicher.

Als Markdown anzeigen

Zustand

Paketstatus: Implementiert · lokal verifiziert. Unit-Tests (19bestanden) laufen auf macOS für einen iOS-Simulator. Der echteIdP-Round-Trip auf einer laufenden XID-Instanz steht manuell aus. DieseSeite dokumentiert implementiertes Verhalten und stellt keinenProduktionsbereitschaftsnachweis dar.

Anforderungen

  • iOS 16+ / macOS 13+
  • Swift 5.9+ und Xcode 15+
  • Keine Drittanbieter-Abhängigkeiten — verwendet ausschließlichApple-System-Frameworks

Installation

Fügen Sie das Paket über den Swift Package Manager in Xcode (Datei ->Paketabhängigkeiten hinzufügen) oder direkt in Package.swift hinzu:

// Package.swift
dependencies: [
    .package(url: "https://github.com/StringKe/xid", from: "0.1.0"),
],
targets: [
    .target(name: "YourApp", dependencies: [.product(name: "Xid", package: "xid")]),
]

Schnellstart

import Xid

// 1. Configure in @main App.init
Xid.shared.configure(options: XidConfiguration(
    issuer: URL(string: "https://xid.dev")!,
    clientId: "your_client_id",
    redirectUri: URL(string: "com.example.app://auth/callback")!,
    scopes: ["openid", "profile", "email", "offline_access"]
))

// 2. Sign in (opens ASWebAuthenticationSession)
try await Xid.shared.signIn()

// 3. Handle redirect in SceneDelegate
let session = try await Xid.shared.handleRedirect(url: callbackUrl)

// 4. Get current session (auto-refreshes near expiry)
if let session = try await Xid.shared.getSession() {
    let token = try await Xid.shared.getAccessToken()
}

// 5. Sign out
try await Xid.shared.signOut(callEndSession: true)

Kern-API

Methode Beschreibung
configure(options:) Mit issuer, clientId, redirectUri, scopes initialisieren. Vor allenanderen Methoden aufrufen.
signIn(options:) async throws ASWebAuthenticationSession mit PKCE-S256-Autorisierungs-URL öffnen. Gibtzurück, wenn die Browser-Sitzung endet.
handleRedirect(url:) async throws -> XidSession OAuth-State validieren, Autorisierungscode am Token-Endpunkt eintauschen,Tokens in Keychain persistieren und eine Sitzung zurückgeben.
getSession() async throws -> XidSession? Die gespeicherte Sitzung zurückgeben, bei nahendem Ablauf eineRefresh-Token-Rotation auslösen.
getAccessToken(forceRefresh:) async throws -> String Einen gültigen Access-Token-String zurückgeben, bei Bedarf automatischerneuern.
signOut(callEndSession:) async throws Keychain-Tokens löschen. true übergeben, um den end_session-Endpunkt überden Browser aufzurufen.
setTokenStorage(_:) throws Den Standard-KeychainTokenStorage durch eine benutzerdefinierteTokenStorageAdapter-Implementierung ersetzen.

Speicher-Adapter

Der Standard-Speicher verwendet den Keychain mitkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly — Tokens werdennicht mit dem iCloud-Keychain synchronisiert. Implementieren Sie dasTokenStorageAdapter-Protokoll, um eineUnternehmens-Keychain-Richtlinie zu verwenden:

struct EnterpriseKeychain: TokenStorageAdapter {
    func save(key: String, value: String) throws { /* ... */ }
    func load(key: String) throws -> String? { /* ... */ }
    func delete(key: String) throws { /* ... */ }
}
try Xid.shared.setTokenStorage(EnterpriseKeychain())

Sicherheit

  • Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
  • Nur PKCE S256. Der Server lehnt die Plain-Challenge-Methode ab.
  • Zufälliger OAuth-State wird pro Anfrage generiert; bei der Weiterleitungzur CSRF-Prävention validiert.
  • PKCE-code_verifier wird nur für die Dauer des Autorisierungsflows in denKeychain geschrieben und unmittelbar nach dem Code-Tausch gelöscht.
  • ASWebAuthenticationSession wird mit prefersEphemeralWebBrowserSession =true gestartet, um die gemeinsame Nutzung von Browser-Cookies zwischenApps zu vermeiden.

Bekannte Einschränkungen

  • Die JWKS-gestützte ES256/RS256-ID-Token-Prüfung, end_session-Abmeldung und Refresh-Single-Flight sind implementiert und lokal getestet. Für L4 ist noch ein echter IdP-Test auf einem iOS-Gerät oder Simulator erforderlich.
  • Das Keychain-Verhalten muss in einem Xcode-Geräte- oder Simulatortest geprüft werden.
Navigation

Suchbegriff eingeben...

Mit den Pfeiltasten navigierenEingabetaste zum AuswählenEscape zum Schließen