Statut
L’état du package est Implémenté et vérifié localement. La suite de tests unitaires Swift réussit sur macOS. L’accès au Keychain, le callback ASWebAuthenticationSession complet et un aller-retour réel avec un IdP nécessitent encore des preuves d’intégration sur ordinateur. Cette page documente le comportement implémenté; elle ne constitue pas une déclaration d’aptitude à la production.
Statut du registre : UNPUBLISHED. Installez ce SDK uniquement depuis un checkout du code source du dépôt ; n’utilisez pas de registre de paquets externe.
Prérequis
- macOS 13+
- Swift 5.9+ et Xcode 15+
- Aucune dépendance tierce — utilise les frameworks système Apple(AuthenticationServices, CryptoKit, Security)
Installation
Ajoutez via Swift Package Manager dans Package.swift :
// Package.swift
dependencies: [
.package(path: "../xid/sdk/macos"),
],
targets: [
.target(name: "YourApp", dependencies: [.product(name: "Xid", package: "macos")]),
]Démarrage rapide
import Xid
let client = XidClient()
// 1. Configure. offline_access is rejected until DPoP is implemented.
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 the current unexpired access token. Expiry requires reauthorization.
let token = try await client.getAccessToken()
// 4. Get the current unexpired session.
let current = try await client.getSession()
// 5. Clear local state and optionally call end_session.
try await client.signOut()API principale
| Méthode | Description |
|---|---|
configure(_ options:) |
Définir issuer, clientId, redirectUri et scopes. À appeler avant toutesles autres méthodes. |
signIn() async throws -> XidSession |
Lancer ASWebAuthenticationSession, compléter le flux de coded’autorisation PKCE S256, persister les jetons dans le Keychain etretourner une session. |
handleRedirect(_ url:) async throws -> XidSession |
Traiter une URL de redirection depuis une source externe et échanger lecode contre des jetons. |
getSession() async throws -> XidSession? |
Retourner la session macOS actuelle non expirée; l’état du jeton expiré est effacé et la méthode retourne nil. |
getAccessToken() async throws -> String |
Retourner le jeton d’accès actuel non expiré. Le SDK rejette offline_access tant que DPoP n’est pas implémenté; l’expiration exige une nouvelle autorisation. |
signOut() async throws |
Effacer les jetons du Keychain et appeler éventuellement le point de terminaison end_session; aucune révocation de refresh token n’est effectuée. |
Relation avec sdk/ios
Le SDK macOS partage le même schéma d’implémentation Swift que sdk/ios —ASWebAuthenticationSession pour l’autorisation via navigateur, CryptoKitpour PKCE S256 et Keychain pour le stockage des jetons. Les deux packagesciblent des versions minimales différentes de la plateforme Apple et sontmaintenus séparément pour permettre une configuration des droitsspécifique à chaque plateforme.
Sécurité
- Client public — aucun secret client stocké ni transmis.
- PKCE S256 uniquement. Le serveur rejette la méthode plain challenge.
- État OAuth généré par requête ; validé lors de la redirection pourprévenir le CSRF.
- Jetons stockés dans le Keychain avec accès limité à l’appareil ; nonsynchronisés sur le Keychain iCloud.
Limites connues
- La verification ES256/RS256 du jeton ID par JWKS et la deconnexion end_session sont implementees et testees localement. Les validations macOS Keychain et IdP restent requises avant le support L4.
- L’extraction d’un noyau Swift partagé avec sdk/ios est prévue mais pasencore réalisée — chaque package porte sa propre copie del’implémentation.