一键导入
spec-federation
外部IdP連携(Federation/SSO)機能の開発・設定を行う際に使用。Google、Azure AD、カスタムOIDCプロバイダー連携、userinfo_mapping_rules設定、oauth-extension実装時に役立つ。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
外部IdP連携(Federation/SSO)機能の開発・設定を行う際に使用。Google、Azure AD、カスタムOIDCプロバイダー連携、userinfo_mapping_rules設定、oauth-extension実装時に役立つ。
用 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等)にルーティングする。共通ワークフロー、前提条件、組み合わせパターンの概要を提供。
認証機能(Authentication Policy, MFA)の開発・修正を行う際に使用。認証ポリシー、パスワード、OTP、FIDO2、条件付き認証実装時に役立つ。
セキュリティ・脆弱性対策の開発・テストを行う際に使用。OAuth/OIDC攻撃対策、認証識別子切り替え攻撃、Session Fixation、マルチテナント分離、セキュリティテスト実装時に役立つ。
外部サービス連携(External Service Integration)機能の開発・修正を行う際に使用。HTTP Request Executor, MappingRule, OAuth/HMAC認証実装時に役立つ。
| name | spec-federation |
| description | 外部IdP連携(Federation/SSO)機能の開発・設定を行う際に使用。Google、Azure AD、カスタムOIDCプロバイダー連携、userinfo_mapping_rules設定、oauth-extension実装時に役立つ。 |
documentation/docs/content_05_how-to/phase-3-advanced/01-federation-setup.md - 設定ガイドdocumentation/docs/content_06_developer-guide/03-application-plane/08-federation.md - 実装ガイドdocumentation/docs/content_06_developer-guide/05-configuration/federation.md - 設定リファレンスlibs/
├── idp-server-federation-oidc/ # OIDC Federation実装
│ └── .../federation/sso/oidc/
│ ├── OidcFederationInteractor.java # メインInteractor
│ ├── OidcSsoExecutor.java # Executor IF
│ ├── OidcSsoExecutors.java # Executor管理
│ ├── StandardOidcExecutor.java # 標準OIDC実行
│ ├── OAuthExtensionExecutor.java # OAuth拡張実行
│ ├── FacebookOidcExecutor.java # Facebook専用
│ ├── UserinfoExecutor.java # UserInfo取得IF
│ ├── UserinfoHttpRequestExecutor.java # 単一リクエスト
│ ├── UserinfoHttpRequestsExecutor.java # 複数リクエスト
│ ├── UserinfoExecutionRequest.java # 実行リクエスト
│ ├── UserinfoExecutionResult.java # 実行結果
│ └── UserInfoMapper.java # マッピング処理
│
├── idp-server-core/ # コア定義
│ └── .../openid/federation/
│ └── sso/
│ ├── SsoProvider.java
│ └── FederationConfiguration.java
│
└── idp-server-control-plane/ # 管理API
└── .../management/federation/
| provider | 説明 | 用途 |
|---|---|---|
standard | 標準OIDCフロー | Google, Azure AD, カスタムOIDC |
oauth-extension | OAuth拡張フロー | カスタムUserInfo取得が必要な場合 |
facebook | Facebook専用 | Facebook Login |
注意: 無効なprovider値は404エラー(No OidcSsoExecutor found for provider xxx)
| provider | JSONPath形式 | 説明 |
|---|---|---|
standard | $.http_request.response_body.{field} | 標準OIDCプロバイダー |
oauth-extension (単一) | $.userinfo_execution_http_request.response_body.{field} | http_request使用時 |
oauth-extension (複数) | $.userinfo_execution_http_requests[index].response_body.{field} | http_requests使用時 |
OAuthExtensionExecutor.requestUserInfo()
↓ UserinfoExecutionRequest に access_token を設定
↓ Map.of("access_token", oidcUserinfoRequest.accessToken())
↓
UserinfoHttpRequestExecutor.execute()
↓ param.put("request_body", request.toMap())
↓ → $.request_body.access_token でアクセストークン参照可能
↓
↓ 結果を Map.of("userinfo_execution_http_request", result) で返却
↓
UserInfoMapper.map()
↓ userinfo_mapping_rules で結果をマッピング
{
"payload": {
"provider": "standard",
"userinfo_mapping_rules": [
{"from": "$.http_request.response_body.sub", "to": "external_user_id"},
{"from": "$.http_request.response_body.email", "to": "email"},
{"from": "$.http_request.response_body.name", "to": "name"}
]
}
}
実装箇所: StandardOidcExecutor クラスの requestUserInfo() メソッド
return UserinfoExecutionResult.success(Map.of("http_request", map));
{
"payload": {
"provider": "oauth-extension",
"userinfo_execution": {
"function": "http_request",
"http_request": {
"url": "https://api.example.com/user/profile",
"method": "GET",
"header_mapping_rules": [
{
"from": "$.request_body.access_token",
"to": "Authorization",
"functions": [{"name": "format", "args": {"template": "Bearer {{value}}"}}]
}
]
}
},
"userinfo_mapping_rules": [
{"from": "$.userinfo_execution_http_request.response_body.user_id", "to": "external_user_id"},
{"from": "$.userinfo_execution_http_request.response_body.email", "to": "email"}
]
}
}
{
"payload": {
"provider": "oauth-extension",
"userinfo_execution": {
"function": "http_requests",
"http_requests": [
{
"url": "https://api.example.com/user/overview",
"method": "POST",
"header_mapping_rules": [
{
"from": "$.request_body.access_token",
"to": "Authorization",
"functions": [{"name": "format", "args": {"template": "Bearer {{value}}"}}]
}
]
}
]
},
"userinfo_mapping_rules": [
{"from": "$.userinfo_execution_http_requests[0].response_body.id", "to": "external_user_id"}
]
}
}
libs/idp-server-platform/src/main/java/org/idp/server/platform/mapper/functions/
| 関数名 | 説明 | 使用例 |
|---|---|---|
format | テンプレート置換 | {"template": "Bearer {{value}}"} |
join | 配列結合 | {"separator": ","} |
split | 文字列分割 | {"separator": ","} |
replace | 文字列置換 | {"from": "a", "to": "b"} |
regex_replace | 正規表現置換 | {"pattern": "...", "replacement": "..."} |
substring | 部分文字列 | {"start": 0, "end": 10} |
trim | 空白除去 | - |
case | 大文字小文字変換 | {"to": "upper|lower"} |
convert_type | 型変換 | {"to": "string|integer|boolean"} |
toフィールド(userinfo_mapping_rules)| フィールド | 説明 | 必須 |
|---|---|---|
external_user_id | 外部IdPでのユーザーID | 必須 |
email | メールアドレス | - |
name | 表示名 | - |
picture | プロフィール画像URL | - |
preferred_username | ユーザー名 | - |
custom_properties.{key} | カスタム属性 | - |
config/templates/federation/
├── google-template.json
├── azure-ad-template.json
└── custom-oidc-template.json
外部IdP連携を有効にするには、以下の2つの設定が両方必要:
available_federationsクライアント設定にフェデレーションIDの配列を設定する必要がある。未設定の場合、外部IdP認証のリクエストが通らない。
{
"extension": {
"available_federations": ["federation-config-id-for-google"]
}
}
success_conditions認証ポリシーの success_conditions に外部IdPの成功カウントパスを含める必要がある。これが欠けていると、Google認証自体は成功するが、認可ステップで authentication is required エラーが返る。
{
"success_conditions": {
"any_of": [
[{"path": "$.oidc-google.success_count", "type": "integer", "operation": "gte", "value": 1}],
[{"path": "$.password-authentication.success_count", "type": "integer", "operation": "gte", "value": 1}]
]
}
}
パスの形式: $.{federation-type}-{provider-id}.success_count(例: $.oidc-google.success_count)
e2e/src/tests/
├── scenario/control_plane/
│ ├── organization/
│ │ ├── organization_federation_config_management.test.js
│ │ └── organization_federation_config_management_structured.test.js
│ └── system/
│ └── federation_management.test.js
│
└── usecase/advance/
└── advance-01-federation-security-event-user-name.test.js
# ビルド
./gradlew :libs:idp-server-federation-oidc:compileJava
# テスト
cd e2e && npm test -- --grep "federation"
cd e2e && npm test -- scenario/control_plane/organization/organization_federation_config_management.test.js
payload.providerの値が正しいか確認(大文字小文字を区別)standard, oauth-extension, facebookstandard → $.http_request.response_body.xxxoauth-extension → $.userinfo_execution_http_request.xxx or $.userinfo_execution_http_requests[n].xxxheader_mapping_rulesで$.request_body.access_tokenを参照format関数でBearer プレフィックスを追加