コンテンツへ移動

sdk/macos

ASWebAuthenticationSession、PKCE S256 認可コードフロー、Keychain トークンストレージを使用した macOS 向け Swift SDK。sdk/ios と実装パターンを共有します。

Markdown で表示

状態

パッケージステータス:実装済み・ローカル検証済み。単体テスト(22 ケースパス)は macOS で実行されます。Keychain アクセスと ASWebAuthenticationSession の完全な OAuth コールバックフローは L4 検証のために稼働中の XID インスタンスが必要です。実際の IdP ラウンドトリップは手動検証待ちです。このページは実装済みの動作を記録したものであり、本番対応の主張ではありません。

動作要件

  • macOS 13+
  • Swift 5.9+ および Xcode 15+
  • サードパーティ依存関係なし — Apple システムフレームワーク(AuthenticationServices、CryptoKit、Security)のみ使用

インストール

Package.swift で Swift Package Manager を使って追加します:

// Package.swift
dependencies: [
    .package(url: "https://github.com/StringKe/xid", from: "0.1.0"),
],
targets: [
    .target(name: "YourApp", dependencies: [.product(name: "Xid", package: "xid")]),
]

クイックスタート

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

方式 説明
configure(_ options:) issuer、clientId、redirectUri、scopes を設定します。他のすべてのメソッドより前に呼び出します。
signIn() async throws -> XidSession ASWebAuthenticationSession を起動し、PKCE S256 認可コードフローを完了し、トークンを Keychain に永続化してセッションを返します。
handleRedirect(_ url:) async throws -> XidSession 外部ソースからのリダイレクト URL を処理し、コードをトークンと交換します。
getSession() async throws -> XidSession? 保存されたセッションを返します。期限切れ間近の場合はリフレッシュトークンを自動的にローテーションします。
getAccessToken() async throws -> String 有効なアクセストークン文字列を返します。必要な場合は自動更新します。
signOut() async throws Keychain トークンをクリアし、ローカルセッションを取り消します。

sdk/ios との関係

macOS SDK は sdk/ios と同じ Swift 実装パターンを共有します。ブラウザベースの認可には ASWebAuthenticationSession、PKCE S256 には CryptoKit、トークンストレージには Keychain を使用します。2 つのパッケージはそれぞれ異なる Apple プラットフォームの最小バージョンを対象とし、プラットフォーム固有の権限設定を可能にするために個別に保守されます。

セキュリティ

  • パブリッククライアント — クライアントシークレットは保存・送信されません。
  • PKCE S256 のみ。サーバーは plain チャレンジメソッドを拒否します。
  • リクエストごとに生成される OAuth state。CSRF を防ぐためリダイレクト時に検証されます。
  • トークンはデバイス専用アクセスで Keychain に保存されます。iCloud Keychain には同期されません。

既知の制限事項

  • JWKS による ES256/RS256 ID token 検証と end_session logout は実装済みでローカルテスト済みです。L4 には macOS Keychain と IdP の検証が必要です。
  • sdk/ios との共有 Swift コア抽出は計画中ですが未実装です。現在は各パッケージが独自の実装コピーを持っています。
ナビゲーション

入力して検索...

矢印キーで移動Enter キーで選択Escape キーで閉じる