Zum Inhalt springen

sdk/macos

Swift-SDK für macOS mit ASWebAuthenticationSession,PKCE-S256-Autorisierungscode-Flow und Keychain-Token-Speicher. Teilt dasImplementierungsmuster mit sdk/ios.

Als Markdown anzeigen

Zustand

Paketstatus: Implementiert · lokal verifiziert. Unit-Tests (22bestanden) laufen auf macOS. Keychain-Zugriff und der vollständigeASWebAuthenticationSession-OAuth-Callback-Flow erfordern eine laufendeXID-Instanz für die L4-Verifizierung. Der echte IdP-Round-Trip stehtmanuell aus. Diese Seite dokumentiert implementiertes Verhalten und stelltkeinen Produktionsbereitschaftsnachweis dar.

Anforderungen

  • macOS 13+
  • Swift 5.9+ und Xcode 15+
  • Keine Drittanbieter-Abhängigkeiten — verwendet Apple-System-Frameworks(AuthenticationServices, CryptoKit, Security)

Installation

Über Swift Package Manager in Package.swift hinzufügen:

// 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

let client = XidClient()

// 1. Configure
client.configure(XidOptions(
    issuer: URL(string: "https://xid.dev")!,
    clientId: "your_client_id",
    redirectUri: "yourapp://callback"
))

// 2. Sign in (opens ASWebAuthenticationSession)
let session = try await client.signIn()

// 3. Get a valid access token (auto-refresh)
let token = try await client.getAccessToken()

// 4. Get current session
let current = try await client.getSession()

// 5. Sign out
try await client.signOut()

Kern-API

Methode Beschreibung
configure(_ options:) issuer, clientId, redirectUri und scopes festlegen. Vor allen anderenMethoden aufrufen.
signIn() async throws -> XidSession ASWebAuthenticationSession starten, PKCE-S256-Autorisierungscode-Flowabschließen, Tokens in Keychain persistieren und eine Sitzung zurückgeben.
handleRedirect(_ url:) async throws -> XidSession Eine Weiterleitungs-URL aus einer externen Quelle verarbeiten und den Codegegen Tokens eintauschen.
getSession() async throws -> XidSession? Die gespeicherte Sitzung zurückgeben, mit automatischerRefresh-Token-Rotation bei nahendem Ablauf.
getAccessToken() async throws -> String Einen gültigen Access-Token-String zurückgeben, bei Bedarf automatischerneuern.
signOut() async throws Keychain-Tokens löschen und die lokale Sitzung widerrufen.

Beziehung zu sdk/ios

Das macOS-SDK teilt dasselbe Swift-Implementierungsmuster wie sdk/ios —ASWebAuthenticationSession für browserbasierte Autorisierung, CryptoKitfür PKCE S256 und Keychain für Token-Speicher. Die zwei Pakete zielen aufunterschiedliche Apple-Plattformminima ab und werden separat gepflegt, umplattformspezifische Berechtigungskonfiguration zu ermöglichen.

Sicherheit

  • Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
  • Nur PKCE S256. Der Server lehnt die Plain-Challenge-Methode ab.
  • OAuth-State wird pro Anfrage generiert; bei der Weiterleitung zurCSRF-Prävention validiert.
  • Tokens im Keychain mit gerätebeschränktem Zugriff gespeichert; nicht mitdem iCloud-Keychain synchronisiert.

Bekannte Einschränkungen

  • Die JWKS-gestützte ES256/RS256-ID-Token-Prüfung und die end_session-Abmeldung sind implementiert und lokal getestet. Für L4 sind noch echte macOS-Keychain- und IdP-Tests erforderlich.
  • Die gemeinsame Swift-Kern-Extraktion mit sdk/ios ist geplant, aber nochnicht abgeschlossen — jedes Paket trägt seine eigeneImplementierungskopie.
Navigation

Suchbegriff eingeben...

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