状態
Registry 状態: UNPUBLISHED。この SDK はリポジトリのソース checkout からのみインストールし、外部 package registry は使用しないでください。
パッケージステータス:現行パッケージ。JS ブリッジ、PKCE S256 フロー、ディープリンクコールバックハンドラー、OS キーチェーンアダプター、Rust プラグインテンプレートが実装済みです。本番インフラでの実際の IdP ラウンドトリップはまだ手動検証待ちです。
Tauri 設定
// tauri.conf.json
{
"bundle": { "identifier": "com.example.myapp" },
"plugins": {
"deep-link": { "desktop": { "schemes": ["myapp"] } }
}
}Rust プラグイン
templates/xid-keychain-plugin.rs を src-tauri/src/xid_keychain.rs にコピーし、templates/tauri-app-setup.rs に従って登録します。src-tauri/Cargo.toml に keyring = "2"、tauri-plugin-deep-link = "2"、tauri-plugin-shell = "2" を追加します。
JS 統合
import { createXidTauriClient, createTauriKeychainAdapter } from '@xid-kit/tauri'
import { invoke } from '@tauri-apps/api/core'
import { open } from '@tauri-apps/plugin-shell'
import { onOpenUrl } from '@tauri-apps/plugin-deep-link'
const client = createXidTauriClient({
issuer: 'https://xid.dev',
clientId: 'YOUR_CLIENT_ID',
redirectUri: 'myapp://auth/callback',
keychain: createTauriKeychainAdapter({ invoke }),
})
// Register deeplink handler (e.g. on App component mount)
await onOpenUrl(async (urls) => {
for (const url of urls) await client.handleRedirect(url)
})
// Trigger sign-in: opens system browser
await client.signIn({ openUrl: open })トークン取得とサインアウト
// Get the current unexpired access token. Expiry requires a new sign-in.
const token = await client.getAccessToken()
// Get the current unexpired session (userId, organizationId, expiresAt).
const session = await client.getSession()
// Clear local keychain state. No refresh or revoke request is sent.
await client.signOut()
// To request full IdP sign-out, open an explicit OIDC RP-initiated logout URL.
const logoutUrl = client.buildSignOutUrl({ postLogoutRedirectUri: 'myapp://logout' })
await open(logoutUrl.toString())Tauri ランタイムなしの開発/テスト
import { createXidTauriClient, createMemoryKeychainAdapter } from '@xid-kit/tauri'
const client = createXidTauriClient({
issuer: 'http://localhost:8788',
clientId: 'test-client',
redirectUri: 'http://localhost:1420/callback',
keychain: createMemoryKeychainAdapter(),
})createXidTauriClient オプション
| オプション | 種別 | 説明 |
|---|---|---|
issuer |
string | XID 発行者 URL |
clientId |
string | OAuth 2.0 client_id |
redirectUri |
string | カスタム URI スキームコールバック |
scopes |
readonly string[] | デフォルト:openid、profile、email |
keychain |
XidKeychainAdapter | トークンストレージアダプター。デフォルトは MemoryKeychainAdapter(本番では Tauri アダプターを使用してください) |
XidTauriClient メソッド
| 方式 | 説明 |
|---|---|
signIn(options?) |
PKCE 認可 URL を構築します。openUrl コールバック経由で開きます |
handleRedirect(url) |
ディープリンクを解析し、state を検証し、コードをトークンと交換します |
getSession() |
現在の有効期限内のローカルセッションを表す TauriSession、または null。有効期限切れの state は消去されます |
getAccessToken(options?) |
現在の有効期限内の access token 文字列、または null。refresh request は行われません。DPoP が実装されるまで SDK は offline_access を拒否します。 |
signOut() |
revoke request を送信せずにローカルの keychain state を消去 |
buildSignOutUrl(options?) |
RP 起点ログアウト用の OIDC end_session URL を構築します |
setTokenStorage(adapter) |
ランタイム時にキーチェーンアダプターを交換します |
PKCE とトークンストレージ
- PKCE S256 が常に使用されます。plain チャレンジは生成されません。
- ベリファイアーのエントロピーは 64 バイト。チャレンジは Web Crypto の
crypto.subtle.digest('SHA-256', ...)で導出されます。 - すべてのキーは
xid.*名前空間に属します。現在使用されるのはxid.access_tokenです。xid.refresh_tokenはレガシーデータのクリーンアップ時にのみ削除されます。xid.session、xid.pkce_verifier、xid.oauth_stateには現在のセッションと認可 state が保持され、refresh credential の読み書きは行われません。