認可
前提知識
このドキュメントを理解するには、以下の基礎知識が役立ちます:
- OAuth 2.0の基本 - OAuth 2.0の認可の仕組み
- OpenID Connectの基本 - OIDCによる認証
- OAuth 2.0の役割 - 4つの役割
- 認可コードフロー - 認可フローの詳細
概要
idp-serverは、OAuth 2.0/OpenID Connect/CIBAに準拠した認可サーバー(Authorization Server) として動作しま す。
認可サーバーとは、リソースへのアクセス権限を管理し、トークンを発行する役割を担うサーバーです。
idp-serverでは以下のような用途に対応できます:
- Webアプリケーションでの「スコープ制限付きアクセス」
- SPAでの「安全なトークン管理(PKCE + Refresh Token Rotation)」
- マイクロサービスでの「サービス間認証(Client Credentials Grant)」
- IoTデバイスでの「非同期認証(CIBA Flow)」
OAuth 2.0における4つの役割
| 役割 | 説明 | idp-serverでの対応 |
|---|---|---|
| Resource Owner | リソースの所有者(エンドユーザー) | idp-serverで認証・同意 |
| Client | リソースにアクセスしたいアプリケーション | Management APIで登録・管理 |
| Authorization Server | 認可を管理し、トークンを発行 | idp-server本体 |
| Resource Server | 保護されたリソース(API)を提供 | Introspectionでトークン検証 |
idp-serverにおける認可の設計思想
1. テナント単位の認可サーバー
idp-serverでは、1つのテナント = 1つの独立した認可サーバー として動作します。
特徴:
- テナントごとに異なる認可ポリシー
- テナントごとに独立したクライアント管理
- テナントごとに異なるトークン設定
メリット:
- マルチテナント環境での完全な分離
- テナントごとのカスタマイズ可能
- セキュリティ境界の明確化
詳細は concept-01: マルチテナント を参照。
2. スコープベースのアクセス制御
idp-serverでは、スコープ(Scope) を単位としてアクセス権限を管理します。
スコープの種類:
| スコープタイプ | 例 | 用途 |
|---|---|---|
| 標準スコープ | openid, profile, email | OIDC標準のユーザー属性 |
| カスタムスコープ | api:read, api:write | 独自API権限 |
| カスタムクレームスコープ | claims:roles, claims:permissions | 個別属性指定(idp-server独自) |
| 身元確認スコープ | verified_claims:given_name | 身元確認済み属性(idp-server独自) |
設計原則:
- 最小権限の原則: 必要最小限のスコープのみ付与
- 粒度の適切さ: 粗すぎず細かすぎない権限設計
- 認証強度との連動: 強い認証 = より多くのスコープ許可(動的スコープフィルタリング)
詳細は concept-09: カスタムクレーム を参照。