認可許諾管理
前提知識
このドキュメントを理解するには、以下の基礎知識が役立ちます:
- OAuth 2.0の基本 - OAuth 2.0の認可の仕組み
- 認可 - 認可サーバーの概要
- 監査ログ - 監査証跡の保持
概要
idp-serverは、OAuth 2.0/OpenID Connectにおける認可許諾(Authorization Grant) と同意(Consent) を管理します。
認可許諾とは、ユーザーがクライアント(アプリケーション)に対して与えた権限の記録です。
idp-serverでは以下のような用途に対応できます:
- ユーザーの同意を記録し、次回以降の同意画面をスキップ
- ユーザーによる同意の取り消し
- 同意履歴の監査証跡としての保持
idp-serverにおける認可許諾管理の設計思想
1. スコープ単位の同意記録
idp-serverは、スコープ単位で同意を記録します。
同意内容:
- 誰が(ユーザーID)
- どのクライアントに(クライアントID)
- どのスコープを(スコープ一覧)
- いつ許可したか(付与日時)
メリット:
- 次回以降、同じスコープであれば同意画面をスキップ
- 新しいスコープが追加された場合のみ同意画面を表示
- ユーザー体験の向上
2. 同意の取り消し
ユーザーは、過去に与えた同意を取り消すことができます。
取り消しの効果:
- 論理削除(
revoked_at設定)で履歴保持 - 関連するアクセストークン・リフレッシュトークンの失効
- 次回アクセス時に再度同意画面を表示
履歴保持の理由:
- 監査証跡として保持
- 統計・分析用途
- 法的証拠
3. 規約・ポリシーの同意追跡(ConsentClaims)
idp-serverは、スコープだけでなくクライアントの利用規約(tos_uri)とプライバシーポリシー(policy_uri)への同意も追跡します。
同意比較の仕組み:
- 認可リクエスト時に、クライアントの現在の
tos_uri/policy_uriからConsentClaimsを生成 - 保存済みの
AuthorizationGranted内のconsent_claimsと比較 - 値が一致しなければ
interaction_requiredエラーを返し、再同意を要求
ConsentClaims のデータ構造:
{
"terms": [
{"name": "tos_uri", "value": "https://example.com/terms/v1", "consented_at": "2026-01-01T10:00:00"},
{"name": "tos_uri", "value": "https://example.com/terms/v2", "consented_at": "2026-03-01T14:00:00"}
],
"privacy": [
{"name": "policy_uri", "value": "https://example.com/privacy/v1", "consented_at": "2026-01-01T10:00:00"}
]
}
- カテゴリ:
terms(利用規約)とprivacy(プライバシーポリシー) - 履歴保持: 規約が更新されるたびに新しいエントリが追加される(上書きではない)
- 比較ロジック:
name+valueの一致で判定(consentedAtは比較に使わない)
再同意が必要になるケース:
| 変更内容 | 結果 | 理由 |
|---|---|---|
tos_uri を変更 | interaction_required | 新しい利用規約への同意が必要 |
policy_uri を変更 | interaction_required | 新しいプライバシーポリシーへの同意が必要 |
| スコープを追加 | interaction_required | 未同意のスコープが含まれる |
| 変更なし | 同意画面スキップ | 全ての同意が有効 |
prompt=noneを使用した認可リクエストでは、再同意が必要な場合にユーザー操作なしでは処理できないためinteraction_requiredエラーが返されます。サードパーティアプリはこのエラーを受け取った場合、通常の認可フロー(同意画面付き)にフォールバックする必要があります。