一键导入
use-case-setup
ユースケース別セットアップのエントリポイント。ユーザーにユースケースを選択してもらい、対応するスキル(use-case-login, use-case-mfa等)にルーティングする。共通ワークフロー、前提条件、組み合わせパターンの概要を提供。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
ユースケース別セットアップのエントリポイント。ユーザーにユースケースを選択してもらい、対応するスキル(use-case-login, use-case-mfa等)にルーティングする。共通ワークフロー、前提条件、組み合わせパターンの概要を提供。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
UserInfoエンドポイント(UserInfo Endpoint)機能の開発・修正を行う際に使用。UserInfo claims、scopeフィルタリング、verified_claims実装時に役立つ。
外部API認証ユースケースの設定ガイド。外部API連携(認証委譲、リスク判定、OTP等)の interaction 設計、identity_match_field、MFA 2段階目、previous_interaction のヒアリングと設定JSONを提供。
認証機能(Authentication Policy, MFA)の開発・修正を行う際に使用。認証ポリシー、パスワード、OTP、FIDO2、条件付き認証実装時に役立つ。
セキュリティ・脆弱性対策の開発・テストを行う際に使用。OAuth/OIDC攻撃対策、認証識別子切り替え攻撃、Session Fixation、マルチテナント分離、セキュリティテスト実装時に役立つ。
外部サービス連携(External Service Integration)機能の開発・修正を行う際に使用。HTTP Request Executor, MappingRule, OAuth/HMAC認証実装時に役立つ。
FIDO2/WebAuthn/パスキー関連の実装・設定・ドキュメント・テストを扱う時に使用。パスキー登録、認証、管理、アテステーション検証に関する作業で自動的に呼び出される。
| name | use-case-setup |
| description | ユースケース別セットアップのエントリポイント。ユーザーにユースケースを選択してもらい、対応するスキル(use-case-login, use-case-mfa等)にルーティングする。共通ワークフロー、前提条件、組み合わせパターンの概要を提供。 |
このスキルは以下のサイクルで、テンプレートベースのセットアップを実行する。
1. ユースケース選択(AskUserQuestion)
2. 対応するスキルをロード(下記ルーティング表を参照)
3. 決定事項のヒアリング(AskUserQuestion)
4. ヒアリング結果を環境変数にマッピング
5. テンプレートの setup.sh を実行
6. 次のユースケースへ(または完了)
| # | ユースケース | スキル名 | テンプレート | Example |
|---|---|---|---|---|
| 1 | ログイン(パスワードのみ) | use-case-login | config/templates/use-cases/login-password-only/ | config/examples/login-password-only/ |
| 2 | ログイン(ソーシャル連携) | use-case-login | config/templates/use-cases/login-social/ | config/examples/login-social/ |
| 3 | MFA(多要素認証) | use-case-mfa | config/templates/use-cases/mfa-email/ | config/examples/mfa-email/ |
| 4 | パスワードレス認証 | use-case-passwordless | config/templates/use-cases/passwordless-fido2/ | config/examples/passwordless-fido2/ |
| 5 | 身元確認/eKYC | use-case-ekyc | config/templates/use-cases/ekyc/ | config/examples/ekyc/ |
| 6 | サードパーティ連携 | use-case-third-party | config/templates/use-cases/third-party/ | config/examples/third-party/ |
| 7 | CIBA(モバイル承認) | use-case-ciba | config/templates/use-cases/ciba/ | - |
| 8 | 金融グレード(FAPI+CIBA) | use-case-financial-grade | config/templates/use-cases/financial-grade/ | config/examples/financial-grade/ |
| 9 | 外部パスワード認証委譲 | use-case-external-password-auth | config/templates/use-cases/external-password-auth/ | - |
| 10 | エンタープライズ(セキュリティイベントフック) | use-case-enterprise | config/templates/use-cases/enterprise/ | - |
| 11 | MFA FIDO-UAF(パスワード + デバイス生体認証) | use-case-mfa-fido-uaf | config/templates/use-cases/mfa-fido-uaf/ | - |
| 12 | 外部API認証 | use-case-external-api-auth | - | - |
重要: ユースケース選択後、対応するスキルをロードしてから作業を進めること。
.env にシステム管理者の認証情報が設定済み:
AUTHORIZATION_SERVER_URL, ADMIN_TENANT_ID, ADMIN_USER_EMAIL, ADMIN_USER_PASSWORD, ADMIN_CLIENT_ID, ADMIN_CLIENT_SECRET全テナントの authorization_server に claims_supported を必ず設定すること。
この設定が無いと、UserInfo / ID Token が sub のみしか返さない。
リファレンス: config/templates/tenant-template.json の claims_supported フィールド
"claims_supported": [
"sub", "iss", "auth_time", "acr",
"name", "given_name", "family_name", "nickname", "preferred_username", "middle_name",
"profile", "picture", "website",
"email", "email_verified",
"gender", "birthdate", "zoneinfo", "locale", "updated_at",
"address", "phone_number", "phone_number_verified"
]
全ユースケースの onboarding-template.json には、管理ダッシュボード(UI)経由での操作に必要な以下の設定が含まれている。
| 設定 | 目的 |
|---|---|
tenant.ui_config | 管理UIのURL・サインインページ設定 |
tenant.cors_config(allow_headers, allow_methods, allow_credentials 含む) | UI→APIのCORS許可 |
tenant.security_event_log_config.statistics_enabled: true | テナント統計の有効化 |
authorization_server.claims_supported | UserInfo/IDトークンのクレーム返却(未設定だと sub のみ) |
authorization_server.scopes_supported に claims:roles/permissions/assigned_tenants | ロール・権限・担当テナント情報の取得 |
authorization_server.extension.custom_claims_scope_mapping: true | claims:* スコープの有効化 |
client.scope にカスタムクレームスコープ含む | クライアントがカスタムクレームを要求可能にする |
introspection_endpoint / revocation_endpoint | 正しいキー名(旧: token_introspection_endpoint / token_revocation_endpoint) |
詳細: documentation/docs/content_05_how-to/phase-1-foundation/02a-organizer-management-ui.md
各ユースケースの setup.sh は以下の共通フローで実行される。
Step 1: アクセストークン取得(password grant)
Step 2: オンボーディング(POST /v1/management/onboarding)
→ Organization + Organizer Tenant + Admin User + Client
Step 3: ORGANIZERテナントの管理者トークン取得
Step 4+: ユースケース固有のリソース作成(組織レベルAPI)
setup.sh 実行後、ブラウザで動作確認する前に以下を確認する。
| # | 確認観点 | 設定箇所 | よくあるミス |
|---|---|---|---|
| 1 | claims_supported が設定済み | 認可サーバー | 未設定で UserInfo/ID Token が sub のみ返却 |
| 2 | custom_claims_scope_mapping: true が設定済み(claims:* スコープ使用時) | 認可サーバー extension | 未設定だと claims:* スコープが機能せず UserInfo/ID Token にカスタムクレームが含まれない |
| 3 | ui_config.base_url が認証UIのオリジン | テナント ui_config | APIサーバーURL を設定してしまう |
| 4 | cors_config に allow_headers, allow_methods, allow_credentials | テナント cors_config | allow_origins だけ設定 |
| 5 | signin_page が正しいパス(/signin/) | テナント ui_config | パスの末尾スラッシュ忘れ |
| 6 | failure_conditions / lock_conditions が設定済み | 認証ポリシー | 未設定だと認証失敗時にアカウントロックされない |
| 7 | setup.sh の変数定義順序 | setup.sh | 参照される変数が先に定義されていること |
| テスト | prompt値 | 目的 |
|---|---|---|
| ユーザー登録 | prompt=create | Sign Up画面を直接表示 |
| 再認証 | prompt=login | 既存セッションを無視して再認証を強制 |
| ヒアリング項目 | 環境変数 | デフォルト値 |
|---|---|---|
| 組織名 | ORGANIZATION_NAME | my-organization |
| 管理者メール | NEW_ADMIN_EMAIL | admin@example.com |
| 管理者パスワード | NEW_ADMIN_PASSWORD | ChangeMe123 |
| Cookie名 | COOKIE_NAME | SESSION |
| UI URL | UI_BASE_URL | ${AUTHORIZATION_SERVER_URL} |
| クライアント名 | CLIENT_NAME | Web Application |
| リダイレクトURI | REDIRECT_URI | http://localhost:3000/callback/ |
| クライアントエイリアス | CLIENT_ALIAS | web-app |
テンプレートのsetup.shは以下の流れでAPIを使用する。
# Step 1-2: システム管理者トークンでオンボーディング(システムレベル)
POST /v1/management/onboarding
# Step 3: ORGANIZER テナントの管理者トークンを取得
POST /{organizer-tenant-id}/v1/tokens
# Step 4+: 組織レベルAPIでリソース作成
POST /v1/management/organizations/{org-id}/tenants # テナント作成
POST /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-configurations # 認証メソッド設定
POST /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-policies # 認証ポリシー
POST /v1/management/organizations/{org-id}/tenants/{tenant-id}/clients # クライアント作成
POST /v1/management/organizations/{org-id}/tenants/{tenant-id}/federation-configurations # フェデレーション設定
POST /v1/management/organizations/{org-id}/tenants/{tenant-id}/identity-verification-configurations # 身元確認設定
PUT /v1/management/organizations/{org-id}/tenants/{tenant-id}/authorization-server # 認可サーバー更新
| 設定 | 内容 |
|---|---|
| 認証方式 | パスワード + Socialログイン(Google) |
| パスワードポリシー | min_length: 8, require_number: true |
| セッション | timeout_seconds: 3600 |
| Passkey | 推奨(authenticator_attachment: platform, resident_key: required) |
| トークン | AT: 30分, RT: ローテーション+固定, 7日 |
| 設定 | 内容 |
|---|---|
| 認証方式 | パスワード + MFA(SMS必須) |
| パスワードポリシー | min_length: 12, require_uppercase: true, require_special_char: true, max_history: 5 |
| セッション | timeout_seconds: 1800, switch_policy: STRICT |
| eKYC | 必須、required_identity_verification_scopes: ["transfers", "account"] |
| FIDO UAF + CIBA | 高額送金時、level_of_authentication_scopes: { "transfers": ["fido-uaf"] } |
| トークン | AT: 15分, RT: ローテーション+固定, 1時間 |
| 設定 | 内容 |
|---|---|
| 認証方式 | Azure AD連携(エンタープライズSSO) |
| MFA | 管理者のみ必須(conditions: { "scopes": ["admin"] }) |
| セッション | timeout_seconds: 28800(8時間), switch_policy: SWITCH_ALLOWED |
| トークン | AT: 1時間, RT: ローテーション+延長, 30日 |
| 設定 | 内容 |
|---|---|
| 認証方式 | パスワードレス(Passkey)推奨 + パスワードフォールバック |
| eKYC | 高額決済時必須 |
| CIBA | モバイル承認(高額決済時) |
| デバイスルール | max_devices: 3, required_identity_verification: true |
| トークン | AT: 15分, RT: ローテーション+固定, 1日 |
| やりたいこと | 推奨ユースケース |
|---|---|
| とにかくログインだけ実装したい | ログイン(パスワードのみ) |
| Google/GitHubでログインさせたい | ログイン(ソーシャル連携) |
| SMS/メールで二段階認証を追加したい | MFA(多要素認証) |
| パスワードなしでPasskeyログインしたい | パスワードレス認証 |
| 本人確認(eKYC)を組み込みたい | 身元確認/eKYC |
| 外部アプリにAPI提供したい | サードパーティ連携 |
| モバイルアプリで承認させたい | CIBA(モバイル承認) |
| モバイルデバイスで生体認証(FIDO-UAF)したい | MFA FIDO-UAF(パスワード + デバイス生体認証) |
| 金融API(FAPI準拠)を作りたい | 金融グレード(FAPI+CIBA) |
| 既存の認証基盤にOIDCを被せたい | 外部パスワード認証委譲 |
| 認証フローに外部APIを組み込みたい(リスク判定、OTP等) | 外部API認証 |
| セキュリティイベントを外部連携したい | エンタープライズ(セキュリティイベントフック) |
| 設定種類 | APIパス | メソッド |
|---|---|---|
| オンボーディング | /v1/management/onboarding | POST |
| テナント作成 | /v1/management/tenants | POST |
| テナント更新 | /v1/management/tenants/{tenant-id} | PUT |
| 認可サーバー更新 | /v1/management/tenants/{tenant-id}/authorization-server | PUT |
| クライアント作成 | /v1/management/tenants/{tenant-id}/clients | POST |
| クライアント更新 | /v1/management/tenants/{tenant-id}/clients/{client-id} | PUT |
| 認証メソッド設定作成 | /v1/management/tenants/{tenant-id}/authentication-configurations | POST |
| 認証ポリシー作成 | /v1/management/tenants/{tenant-id}/authentication-policies | POST |
| フェデレーション設定作成 | /v1/management/tenants/{tenant-id}/federation-configurations | POST |
| 身元確認テンプレート作成 | /v1/management/tenants/{tenant-id}/identity-verification-configurations | POST |
| 設定種類 | APIパス | メソッド |
|---|---|---|
| テナント更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id} | PUT |
| 認可サーバー更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/authorization-server | PUT |
| クライアント作成 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/clients | POST |
| クライアント更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/clients/{client-id} | PUT |
| 認証メソッド設定作成 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-configurations | POST |
| 認証メソッド設定更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-configurations/{config-id} | PUT |
| 認証ポリシー作成 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-policies | POST |
| 認証ポリシー更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/authentication-policies/{policy-id} | PUT |
| フェデレーション設定作成 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/federation-configurations | POST |
| 身元確認テンプレート作成 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/identity-verification-configurations | POST |
| 身元確認テンプレート更新 | /v1/management/organizations/{org-id}/tenants/{tenant-id}/identity-verification-configurations/{config-id} | PUT |
注意: 組織レベルAPIを使うには、オンボーディングで作成された ORGANIZER テナントが必要。
$ARGUMENTS