OAuth 2.0トークンイントロスペクション(RFC 7662)

リソースサーバーがOAuth 2.0トークンイントロスペクションエンドポイントを使用して不透明なアクセストークンを検証する方法。リクエスト/レスポンス例付き。

Token Management

詳細な説明

トークンイントロスペクション(RFC 7662)

アクセストークンが不透明な文字列(自己完結型JWTではない)の場合、リソースサーバーはローカルで検証できません。トークンイントロスペクションは、リソースサーバーがトークンがアクティブかどうか、誰に発行されたか、どのスコープを持つかを確認するために呼び出す標準APIエンドポイントを提供します。

イントロスペクションリクエスト

POST /introspect HTTP/1.1
Host: auth.example.com
Authorization: Basic czZCaGRSa3F0MzoZ...
Content-Type: application/x-www-form-urlencoded

token=2YotnFZFEjr1zCsicMWpAA&token_type_hint=access_token

アクティブなトークンのレスポンス

{
  "active": true,
  "scope": "read write",
  "client_id": "s6BhdRkqt3",
  "username": "johndoe",
  "token_type": "Bearer",
  "exp": 1709123456,
  "iat": 1709119856,
  "sub": "user-12345",
  "aud": "https://api.example.com",
  "iss": "https://auth.example.com"
}

非アクティブなトークンのレスポンス

{
  "active": false
}

主要なレスポンスフィールド

フィールド 説明
active Boolean — 唯一の必須フィールド。トークンが有効かどうかを示す。
scope トークンに関連付けられたスペース区切りのスコープ
client_id トークンが発行されたクライアント
username リソースオーナーの人間が読める識別子
exp 有効期限(Unixタイムスタンプ)
sub サブジェクト識別子(ユーザーID)
aud トークンの意図された対象者

JWT vs 不透明トークン

JWT 不透明トークン
検証 ローカル(署名検証) リモート(イントロスペクションエンドポイント)
パフォーマンス 高速(ネットワーク呼び出しなし) 低速(リクエストごとのネットワーク呼び出し、キャッシュ可能)
取り消し 困難(有効期限まで) 即時(イントロスペクションがactive=falseを返す)
サイズ 大きい(ペイロード含む) 小さい(参照のみ)

イントロスペクションの使用場面

  • 即時のトークン取り消しが必要な場合
  • トークンが不透明な参照の場合
  • リソースサーバーがトークンに関する認可サーバーのメタデータを必要とする場合
  • レイテンシーを軽減するためにキャッシュ(例:30-60秒)と組み合わせ可能

ユースケース

不透明なアクセストークンを受信するリソースサーバー(API)がリクエストを処理する前にトークンを検証する必要がある場合。APIが認可サーバーのイントロスペクションエンドポイントを呼び出して、トークンがまだアクティブか、そのスコープ、ユーザーの識別を確認します。

試してみる — OAuth 2.0 Flow Visualizer

フルツールを開く