Token Endpoint実装ガイド
このドキュメントの目的
トークンエンドポイント(トークン発行・検証・失効)の実装を理解することが目標です。
所要時間
⏱️ 約30分
前提知識
- 02. Authorization Flow
- OAuth 2.0基礎知識
Token Endpointとは
OAuth 2.0のトークンエンドポイント(Token Endpoint) は、トークンに関する3つの機能を提供します:
- Token Request: トークン発行(RFC 6749 Section 3.2)
- Token Introspection: トークン検証(RFC 7662)
- Token Revocation: トークン失効(RFC 7009)
RFC準拠: OAuth 2.0 (RFC 6749), Token Introspection (RFC 7662), Token Revocation (RFC 7009), DPoP (RFC 9449)
エンドポイント一覧
# トークン発行(RFC 6749)
POST /{tenant-id}/v1/tokens
# トークンイントロスペクション(RFC 7662)
POST /{tenant-id}/v1/tokens/introspection
# トークン失効(RFC 7009)
POST /{tenant-id}/v1/tokens/revocation
実装: TokenV1Api.java
実装アーキテクチャ全体像
30秒で理解する全体像
HTTPリクエスト
↓
Controller (TokenV1Api) - HTTP処理
↓
EntryService (TokenEntryService) - トランザクション管理
↓
Core層 (TokenProtocol → TokenRequestHandler)
├─ Validator: 入力形式チェック
├─ クライアント認証(5種類)
├─ Grant Type別Service選択(4種類+拡張)
└─ トークン発行
↓
Repository - データ永続化
主要クラスの責務
| クラス | 役割 | 主な処理 |
|---|---|---|
| TokenV1Api | HTTPエンドポイント | パラメータ受け取り、レスポンス返却 |
| TokenEntryService | オーケストレーション | トランザクション、イベント発行 |
| TokenRequestHandler | トークン発行処理 | Validator、クライアント認証、Service選択 |
| ClientAuthenticationHandler | クライアント認証 | 5種類の認証方式から選択・実行 |
| OAuthTokenCreationServices | Grant Type振り分け | 4種類+拡張からService選択 |
主要ドメインオブジェクト
| オブジェクト | 説明 | 保存場所 | 有効期限 |
|---|---|---|---|
| OAuthToken | Access Token/Refresh Token | DB | 設定による(デフォルト1時間) |
| AuthorizationCodeGrant | Authorization Code | Redis + DB | 5分(使用後即無効) |
| ClientCredentials | クライアント認証情報 | - | - |
1. Token Request(トークン発行)
トークンエンドポイントの最も重要な機能はトークン発行です。Authorization Codeやクライアント認証情報を使ってAccess Token/Refresh Token/ID Tokenを発行します。
1.1 処理フロー全体
実装: TokenRequestHandler.java:82-120
POST /{tenant-id}/v1/tokens
↓
TokenRequestHandler.handle()
↓
┌────────────────────────────────────────┐
│ 1. Validator(入力形式チェック) │
│ - grant_type必須 │
│ - パラメータ形式チェック │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 2. 設定取得 │
│ - AuthorizationServerConfiguration │
│ - ClientConfiguration │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 3. クライアント認証 │
│ → ClientAuthenticationHandler │
│ └─ 5種類から選択・実行 │
└────────────────────────────────────────┘
↓
┌───────────────── ───────────────────────┐
│ 4. Grant Type別Service選択 │
│ → OAuthTokenCreationServices │
│ └─ 4種類+拡張から選択 │
└────────────────────────────────────────┘
↓
┌────────────────────────────────────────┐
│ 5. トークン発行 │
│ → Service.create() │
│ ├─ Authorization Code検証 │
│ ├─ DPoP検証(RFC 9449) │
│ ├─ Access Token生成 │
│ ├─ Refresh Token生成 │
│ ├─ ID Token生成(OIDC) │
│ └─ DB保存 │
└────────────────────────────────────────┘
↓
TokenRequestResponse
1.2 クライアント認証(Client Authentication)
詳細: 10. Client Authentication実装 - 7つの認証方式の完全ガイド