Aller au contenu

sdk/macos

SDK Swift pour macOS utilisant ASWebAuthenticationSession, le flux de coded'autorisation PKCE S256 et le stockage des jetons dans le Keychain.Partage le schéma d'implémentation avec sdk/ios.

Afficher en Markdown

Statut

Le statut du package est Implémenté · vérifié localement. Les testsunitaires (22 réussis) s’exécutent sur macOS. L’accès au Keychain et leflux complet du callback OAuth ASWebAuthenticationSession nécessitent uneinstance XID active pour la vérification L4. L’aller-retour réel avec unIdP est en attente de vérification manuelle. Cette page documente lecomportement implémenté ; ce n’est pas une affirmation de disponibilité enproduction.

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(url: "https://github.com/StringKe/xid", from: "0.1.0"),
],
targets: [
    .target(name: "YourApp", dependencies: [.product(name: "Xid", package: "xid")]),
]

Démarrage rapide

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()

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 stockée avec rotation automatique du jetond’actualisation si proche de l’expiration.
getAccessToken() async throws -> String Retourner une chaîne de jeton d’accès valide, en rafraîchissantautomatiquement si nécessaire.
signOut() async throws Effacer les jetons Keychain et révoquer la session locale.

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.
Navigation

Saisissez votre recherche...

Utilisez les touches fléchées pour naviguerAppuyez sur Entrée pour sélectionnerAppuyez sur Échap pour fermer