セキュリティ強化のためのリフレッシュトークンローテーション

リフレッシュトークンローテーションの仕組みと、長期間のOAuth 2.0セッションでのトークン盗難防止に不可欠な理由を学びます。

Token Management

詳細な説明

リフレッシュトークンローテーション

リフレッシュトークンローテーションは、クライアントがリフレッシュトークンを使用するたびに認可サーバーが新しいリフレッシュトークンを発行するセキュリティメカニズムです。古いリフレッシュトークンは即座に無効化されます。攻撃者がリフレッシュトークンを盗み、正当なクライアントが既にローテーションした後にそれを使用しようとすると、サーバーが再利用を検出しトークンファミリー全体を取り消します。

仕組み

  1. 初期トークンレスポンス: クライアントがaccess_tokenとrefresh_token(RT1)を受信。

  2. アクセストークンの期限切れ: expires_in秒後、アクセストークンは無効に。

  3. リフレッシュリクエスト: クライアントがgrant_type=refresh_tokenでRT1を/tokenエンドポイントに送信。

  4. 新しいトークン: サーバーが新しいaccess_tokenと新しいrefresh_token(RT2)を返す。RT1は無効化。

  5. 繰り返し: 各リフレッシュが現在のリフレッシュトークンを新しいペアに交換。

トークンリクエスト

POST /token HTTP/1.1
Host: auth.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&refresh_token=tGzv3JOkF0XG5Qx2TlKW...
&client_id=s6BhdRkqt3

再利用検出

RT2が発行された後にRT1が再度使用された場合、サーバーは侵害が発生したことを認識します:

イベント サーバーのアクション
RT1でRT2を取得 正常 — 新しいトークンを発行
RT2でRT3を取得 正常 — 新しいトークンを発行
RT1の再利用 侵害検出 — ファミリー内のすべてのトークンを取り消し

利点

  • 露出ウィンドウの制限: リフレッシュトークンが盗まれても、正当なクライアントが次に使用した時点で無効になる
  • 侵害の検出: トークンの再利用は潜在的な攻撃のシグナル
  • 長期セッションのサポート: セキュリティを維持しながらユーザーが再認証なしでログイン状態を維持

実装の注意事項

  • リフレッシュトークンを「トークンファミリー」識別子付きでサーバーサイドに保存
  • 再利用が検出された場合、ファミリー内のすべてのトークンを取り消し、再認証を強制
  • リフレッシュトークンに絶対最大有効期間を設定(例:30日)
  • 短命のアクセストークン(例:5-15分)と組み合わせる

ユースケース

ユーザーを数日から数週間ログイン状態に保つ必要があるSPAやモバイルアプリ。長命のアクセストークンを付与する代わりに、短命のアクセストークンを使用し、ローテーションするリフレッシュトークンでリフレッシュします。トークンが盗まれた場合、ローテーションメカニズムが攻撃者を検出しブロックします。

試してみる — OAuth 2.0 Flow Visualizer

フルツールを開く