OpenID Connect が発行する、認証結果を表す JWT(JSON Web Token) 。アクセストークン(OAuth 2.0 が発行する API 利用権)とは異なり、 「ユーザーが誰か」を保証する署名付きクレーム を含む。
アクセストークンとの違い
| 観点 | ID Token | Access Token |
|---|---|---|
| 目的 | 認証(誰か) | 認可(何ができるか) |
| 形式 | 必ず JWT(OIDC 仕様) | 不問(多くは JWT) |
| 送り先 | クライアント本体 | API サーバー |
| 有効期限 | 短い(数分〜数時間) | 短い〜中程度 |
| 検証 | クライアント側で署名検証必須 | リソースサーバーで検証 |
標準クレーム(OIDC Core 1.0 で定義)
| クレーム | 意味 |
|---|---|
iss | 発行元(Issuer) |
sub | ユーザーの一意識別子(Subject) |
aud | 受信者(Audience、通常はクライアント ID) |
exp | 有効期限(Expiration) |
iat | 発行時刻(Issued At) |
nonce | リプレイ攻撃防止のためのランダム値 |
auth_time | 認証された時刻(オプション) |
検証時の必須チェック
ID Token を受け取ったクライアントは以下を すべて検証 する必要がある。
- 署名検証 : 発行元(IdP)の公開鍵で署名を検証
iss: 期待する IdP からの発行かaud: 自分のクライアント ID が含まれるかexp: 有効期限切れでないかnonce: リクエスト時に送った nonce と一致するか
これらの検証を省略すると、偽造 ID Token を受け入れてしまう脆弱性が生まれる。
関連用語
- OpenID Connect — ID Token を発行する仕様
- OAuth 2.0 — アクセストークンの基盤
- PKCE — ID Token を取得する認可コードフローの拡張