원클릭으로
spec-authentication
認証機能(Authentication Policy, MFA)の開発・修正を行う際に使用。認証ポリシー、パスワード、OTP、FIDO2、条件付き認証実装時に役立つ。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
認証機能(Authentication Policy, MFA)の開発・修正を行う際に使用。認証ポリシー、パスワード、OTP、FIDO2、条件付き認証実装時に役立つ。
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を提供。
ユースケース別セットアップのエントリポイント。ユーザーにユースケースを選択してもらい、対応するスキル(use-case-login, use-case-mfa等)にルーティングする。共通ワークフロー、前提条件、組み合わせパターンの概要を提供。
セキュリティ・脆弱性対策の開発・テストを行う際に使用。OAuth/OIDC攻撃対策、認証識別子切り替え攻撃、Session Fixation、マルチテナント分離、セキュリティテスト実装時に役立つ。
外部サービス連携(External Service Integration)機能の開発・修正を行う際に使用。HTTP Request Executor, MappingRule, OAuth/HMAC認証実装時に役立つ。
FIDO2/WebAuthn/パスキー関連の実装・設定・ドキュメント・テストを扱う時に使用。パスキー登録、認証、管理、アテステーション検証に関する作業で自動的に呼び出される。
| name | spec-authentication |
| description | 認証機能(Authentication Policy, MFA)の開発・修正を行う際に使用。認証ポリシー、パスワード、OTP、FIDO2、条件付き認証実装時に役立つ。 |
documentation/docs/content_06_developer-guide/03-application-plane/04-authentication.md - 認証実装ガイドdocumentation/docs/content_06_developer-guide/05-configuration/authentication-policy.md - 認証ポリシー設定documentation/docs/content_06_developer-guide/05-configuration/authn/ - 認証方式別設定ガイド
password.md, sms.md, email.md, fido2.md, fido-uaf.mddocumentation/docs/content_03_concepts/03-authentication-authorization/concept-01-authentication-policy.md - 認証ポリシー概念documentation/docs/content_03_concepts/03-authentication-authorization/concept-02-mfa.md - MFA概念documentation/docs/content_06_developer-guide/03-application-plane/06-ciba-flow.md - CIBAフロー(LoginHint解決)認証機能は、ユーザーの本人確認を行う層。
libs/
├── idp-server-core/ # 認証コア
│ └── .../openid/authentication/
│ ├── AuthenticationInteractor.java # 認証Interactor IF
│ ├── AuthenticationTransaction.java # 認証トランザクション
│ ├── AuthenticationTransactionCommandRepository.java
│ └── AuthenticationTransactionQueryRepository.java
│
├── idp-server-authentication-interactors/ # 認証Interactor実装
│ └── .../authentication/interactors/
│ ├── password/
│ │ └── PasswordAuthenticationInteractor.java
│ ├── sms/
│ │ └── SmsAuthenticationInteractor.java
│ ├── email/
│ │ └── EmailAuthenticationInteractor.java
│ ├── fido2/
│ │ ├── Fido2AuthenticationInteractor.java
│ │ └── Fido2RegistrationInteractor.java
│ ├── fidouaf/
│ │ └── FidoUafAuthenticationInteractor.java
│ └── ... (各認証方式の実装)
│
└── idp-server-control-plane/ # 管理API
└── .../management/authentication/
└── AuthenticationPolicyManagementApi.java
認証ポリシーは設定ベースで管理:
public class AuthenticationConfiguration {
String type; // password, sms, email, fido2, fido_uaf, etc.
Map<String, Object> payload;
// 設定内容は type により異なる
}
idp-server-core/openid/authentication/ 内:
public interface AuthenticationInteractor {
AuthenticationInteractionType type();
String method();
/**
* 認証インタラクションを実行
*/
AuthenticationInteractionRequestResult interact(
Tenant tenant,
AuthenticationTransaction transaction,
AuthenticationInteractionType type,
AuthenticationInteractionRequest request,
RequestAttributes requestAttributes,
UserQueryRepository userQueryRepository
);
}
idp-server-authentication-interactors/ モジュール内のInteractorは、
interact()メソッドを実装し、AuthenticationInteractionRequestResultを返します。
パスワード検証の概念:
詳細は documentation/docs/content_06_developer-guide/05-configuration/authn/password.md のブルートフォース対策セクションを参照。
idp-server-webauthn4j-adapter/ モジュール内:
WebAuthn Assertion検証をwebauthn4jライブラリを使用して実行し、 公開鍵暗号方式により認証を実現します。
e2e/src/tests/
├── spec/
│ ├── oidc_core_3_1_code.test.js # Authorization Code Flow
│ ├── rfc6749_4_3_resource_owner_password_credentials.test.js # パスワードグラント
│ └── ... (各OIDCフロー仕様テスト)
│
├── scenario/application/
│ ├── scenario-01-user-registration.test.js # ユーザー登録
│ ├── scenario-03-mfa-registration.test.js # MFA登録
│ └── scenario-04-ciba-mfa.test.js # CIBA MFA
│
├── usecase/mfa/
│ ├── mfa-01-password-reset-email-auth.test.js
│ └── mfa-03-fido-uaf-device-registration-acr-policy.test.js
│
└── monkey/
├── password-authentication-monkey.test.js
└── sms-authentication-monkey.test.js
# ビルド
./gradlew :libs:idp-server-core:compileJava
./gradlew :libs:idp-server-authentication-interactors:compileJava
./gradlew :libs:idp-server-webauthn4j-adapter:compileJava
# テスト
cd e2e && npm test -- spec/oidc_core_3_1_code.test.js
cd e2e && npm test -- scenario/application/scenario-03-mfa-registration.test.js
AuthenticationConfiguration.type が正しいか確認/v1/me/mfa/{type})は flow 別の認証ポリシーが必要flow: "oauth" のポリシーだけでは不足flow: "fido2-registration" のポリシーを作成flow: "fido-uaf-registration" のポリシーを作成oauth, ciba, fido2-registration, fido-uaf-registration, fido2-deregistration, fido-uaf-deregistration, mfa-sms-registration, mfa-email-registrationAuthenticationTransaction の有効期限(デフォルト: 5分)を確認認証方式は Plugin アーキテクチャで拡張可能。各認証方式は AuthenticationInteractorFactory を実装し、META-INF/services/ で登録される。
public interface AuthenticationInteractorFactory {
AuthenticationInteractor create(AuthenticationDependencyContainer container);
}
AuthenticationDependencyContainer から依存関係を resolve() して Interactor を組み立てる。
探索起点: libs/idp-server-authentication-interactors/
FIDO2/WebAuthn は AuthenticationExecutorFactory を実装した個別の Executor クラス群で構成:
WebAuthn4jRegistrationChallengeExecutor - 登録チャレンジ生成WebAuthn4jAuthenticationExecutor - 認証WebAuthn4jRegistrationExecutor - 登録WebAuthn4jDeregistrationExecutor - 登録解除探索起点: libs/idp-server-webauthn4j-adapter/
外部 IdP 連携は FederationInteractor インターフェースで実装。
SPA → idp-server(request) → 外部 IdP 認可エンドポイント
外部 IdP → idp-server(callback) → ユーザー紐づけ → AuthenticationTransaction 更新
FederationInteractorFactory で FederationType に応じた Interactor を生成request(): 外部 IdP の認可 URL を生成しリダイレクトcallback(): 外部 IdP からのコールバックを処理、ユーザー紐づけ探索起点: libs/idp-server-federation-oidc/
認証インタラクションの操作種別:
| 値 | 用途 |
|---|---|
CHALLENGE | チャレンジ生成(SMS/Email/WebAuthn) |
AUTHENTICATION | 認証実行 |
REGISTRATION | デバイス/クレデンシャル登録 |
DENY | 認証拒否 |
DE_REGISTRATION | 登録解除 |
NO_ACTION | 操作なし |
UNKNOWN | 不明 |
SMS, Email, WebAuthn, Device — チャレンジ生成 → ユーザー応答 → 検証の2ステップ
Password, External Token, Cancel — 1回のリクエストで完結
authentication/interactors/
├── cancel/ # 認証キャンセル
├── device/ # デバイス認証(CIBA)
├── email/ # Email OTP
├── external_token/ # 外部トークン
├── fidouaf/ # FIDO-UAF
├── initial_registration/ # 初期登録
├── password/ # パスワード
├── plugin/ # Plugin 定義
├── sms/ # SMS OTP
└── webauthn/ # WebAuthn/FIDO2
テナント設定 identity_policy_config.password_policy で制御。
| 設定 | 説明 |
|---|---|
min_length | 最小文字数(デフォルト: 8) |
max_length | 最大文字数(デフォルト: 72、BCrypt制約) |
require_uppercase | 大文字必須 |
require_lowercase | 小文字必須 |
require_number | 数字必須 |
require_special_char | 特殊文字必須 |
max_attempts | ロックまでの最大失敗回数 |
lockout_duration_seconds | ロック期間(秒) |
パスワード認証の失敗回数がしきい値に達するとアカウントをロックする仕組み。3つの設定が連携して動作する:
password_policy.max_attempts + lockout_duration_secondsfailure_conditions: 失敗回数の条件(例: $.password-authentication.failure_count >= 3)lock_conditions: ロック判定条件(failure_conditions と同じ条件を設定)ロック中は正しいパスワードでも認証が拒否される。lockout_duration_seconds 経過後に自動解除。
success_conditions / failure_conditions / lock_conditions / device_registration_conditions の path は2つの名前空間を参照できる:
$.<interaction-type>.* — 各認証方式の結果(例: $.password-authentication.success_count)$.user.* — 認証済みユーザー属性(status, email_verified, phone_number_verified, has_password, provider_id, roles, permissions, custom_properties.*)。複数ステータスの許可は $.user.status を in で列挙するロール分岐は { "path": "$.user.roles", "operation": "contains", "value": "admin" } のように書く。
セキュリティ(Issue #1501): $.user.* は allowリスト方式。hashed_password / credentials / verified_claims は意図的に除外(条件評価の成否が値抽出オラクルになりうるため)。ポリシー評価専用で外部APIリクエストには使われない。属性一覧は documentation/docs/content_06_developer-guide/05-configuration/authentication-policy.md の「参照可能なコンテキスト」を参照。
実装: PolicyEvaluationUserContextCreator#create(User)(allowリスト投影。User クラスには持たせず evaluator 側が所有)→ MfaConditionEvaluator(評価コンテキストに user ノードを追加、2引数シグネチャは後方互換 delegate)→ AuthenticationTransaction#isSuccess/isFailure/isLocked と OIDCSessionVerifier(セッション再利用時も同一ユーザーで評価)。
2ステップのChallenge-Response型:
sms-authentication-challenge / email-authentication-challenge でOTPコードを送信sms-authentication / email-authentication でコードを検証expire_seconds で設定可能(期限切れコードは検証失敗)authentication-interactions/{id}/sms-authentication-challenge で検証コードを取得可能MFA認証完了後、ID Tokenの amr クレームに使用された全認証方式が含まれる:
{
"amr": ["sms", "pwd"] // SMS OTP + パスワード
}
| 認証方式 | AMR 値 |
|---|---|
| Password | pwd |
| SMS | sms |
| WebAuthn/FIDO2 | fido |
| FIDO-UAF | fido |