Ir para o conteúdo

sdk/macos

SDK Swift para macOS usando ASWebAuthenticationSession, fluxo decódigo de autorização PKCE S256 e armazenamento de tokens noKeychain. Compartilha o padrão de implementação com sdk/ios.

Ver como Markdown

Estado

O status do pacote é Implementado · verificado localmente.Testes unitários (22 passaram) executam no macOS. O acesso aoKeychain e o fluxo completo de callback OAuth viaASWebAuthenticationSession requerem uma instância XID em execuçãopara verificação L4. A ida e volta real com o IdP está pendente deverificação manual. Esta página documenta o comportamentoimplementado; não é uma declaração de prontidão para produção.

Requisitos

  • macOS 13+
  • Swift 5.9+ e Xcode 15+
  • Sem dependências de terceiros — usa frameworks do sistema Apple(AuthenticationServices, CryptoKit, Security)

Instalação

Adicione via Swift Package Manager em 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")]),
]

Início 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 Descrição
configure(_ options:) Define issuer, clientId, redirectUri e escopos. Chame antes de todosos outros métodos.
signIn() async throws -> XidSession Abre ASWebAuthenticationSession, conclui o fluxo de código deautorização PKCE S256, persiste os tokens no Keychain e retorna umasessão.
handleRedirect(_ url:) async throws -> XidSession Processa uma URL de redirecionamento de uma fonte externa e troca ocódigo por tokens.
getSession() async throws -> XidSession? Retorna a sessão armazenada com rotação automática do refresh tokense próxima da expiração.
getAccessToken() async throws -> String Retorna uma string de token de acesso válida, atualizandoautomaticamente se necessário.
signOut() async throws Limpa os tokens do Keychain e revoga a sessão local.

Relação com sdk/ios

O SDK macOS compartilha o mesmo padrão de implementação Swift quesdk/ios — ASWebAuthenticationSession para autorização baseada emnavegador, CryptoKit para PKCE S256 e Keychain para armazenamento detokens. Os dois pacotes têm versões mínimas da plataforma Applediferentes e são mantidos separadamente para permitir a configuraçãode entitlements específicos da plataforma.

Segurança

  • Cliente público — nenhum segredo de cliente armazenado ou transmitido.
  • Apenas PKCE S256. O servidor rejeita o método de desafio plain.
  • State OAuth gerado por requisição; validado no redirecionamento paraprevenir CSRF.
  • Tokens armazenados no Keychain com acesso exclusivo ao dispositivo;não sincronizados com o iCloud Keychain.

Limitações conhecidas

  • A verificacao ES256/RS256 de ID token com JWKS e o logout end_session estao implementados e testados localmente. A validacao de macOS Keychain e IdP ainda e necessaria para L4.
  • A extração do núcleo Swift compartilhado com sdk/ios está planejada,mas ainda não foi realizada — cada pacote carrega sua própria cópiada implementação.
Navegação

Digite para pesquisar...

Use as teclas de seta para navegarPressione Enter para selecionarPressione Escape para fechar