Saltar al contenido

sdk/macos

SDK Swift para macOS que usa ASWebAuthenticationSession, flujo de código de autorización PKCE S256 y almacenamiento de tokens en Keychain. Comparte el patrón de implementación con sdk/ios.

Ver como Markdown

Estado

El estado del paquete es Implementado · verificado localmente. Las pruebas unitarias (22 pasadas) se ejecutan en macOS. El acceso al Keychain y el flujo completo de callback OAuth de ASWebAuthenticationSession requieren una instancia XID activa para la verificación de nivel L4. La prueba de ida y vuelta real contra un IdP está pendiente de verificación manual. Esta página documenta el comportamiento implementado; no es una declaración de disponibilidad para producción.

Requisitos

  • macOS 13+
  • Swift 5.9+ y Xcode 15+
  • Sin dependencias de terceros: usa los frameworks del sistema Apple (AuthenticationServices, CryptoKit, Security)

Instalación

Añade mediante Swift Package Manager en 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")]),
]

Inicio rápido

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 principal

Método Descripción
configure(_ options:) Establece issuer, clientId, redirectUri y scopes. Llámalo antes que todos los demás métodos.
signIn() async throws -> XidSession Lanza ASWebAuthenticationSession, completa el flujo de código de autorización PKCE S256, persiste los tokens en el Keychain y devuelve una sesión.
handleRedirect(_ url:) async throws -> XidSession Procesa una URL de redirección de una fuente externa e intercambia el código por tokens.
getSession() async throws -> XidSession? Devuelve la sesión almacenada con rotación automática del refresh token si está próxima a expirar.
getAccessToken() async throws -> String Devuelve una cadena de access token válida, renovándola automáticamente si es necesario.
signOut() async throws Limpia los tokens del Keychain y revoca la sesión local.

Relación con sdk/ios

El SDK de macOS comparte el mismo patrón de implementación Swift que sdk/ios: ASWebAuthenticationSession para autorización basada en navegador, CryptoKit para PKCE S256 y Keychain para almacenamiento de tokens. Los dos paquetes apuntan a mínimos de plataforma Apple diferentes y se mantienen por separado para permitir la configuración de permisos específicos de cada plataforma.

Seguridad

  • Cliente público: no se almacena ni transmite ningún secreto de cliente.
  • Solo PKCE S256. El servidor rechaza el método plain de challenge.
  • Estado OAuth generado por solicitud; validado en la redirección para prevenir CSRF.
  • Tokens almacenados en Keychain con acceso solo en el dispositivo; no se sincronizan con iCloud Keychain.

Limitaciones conocidas

  • La verificación ES256/RS256 de ID token basada en JWKS y el cierre de sesión end_session están implementados y probados localmente. La validación real de Keychain de macOS e IdP sigue siendo necesaria para L4.
  • La extracción del núcleo Swift compartido con sdk/ios está planificada pero aún no se ha realizado: cada paquete lleva su propia copia de la implementación.
Navegación

Escribe para buscar...

Usa las flechas para navegarPulsa Intro para seleccionarPulsa Escape para cerrar