コンテンツへ移動

@xid-kit/tauri

PKCE S256 フロー、ディープリンクコールバックハンドラー、OS キーチェーンアダプター、Rust プラグインテンプレートを備えた Tauri v2 デスクトップ SDK。

Markdown で表示

状態

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.rssrc-tauri/src/xid_keychain.rs にコピーし、templates/tauri-app-setup.rs に従って登録します。src-tauri/Cargo.tomlkeyring = "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.sessionxid.pkce_verifierxid.oauth_state には現在のセッションと認可 state が保持され、refresh credential の読み書きは行われません。
ナビゲーション

入力して検索...

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