Google API へオフラインアクセスするサーバや BFF 向け。長期 refresh token を持ち出しても、秘密鍵なしでは新しい access token を取れない。採用は任意で、access token の token_type は Bearer のまま(通常 1 時間以内)。

  • 認可コード交換時に DPoP ヘッダへ proof JWT を付けると、返る refresh token がその鍵に束縛される
  • 推奨鍵は EC P-256(ES256)。固定クレームは htm: POST と htu: https://oauth2.googleapis.com/token
  • 認可コード交換の jti は BASE64URL(SHA-256(authorization_code))。refresh では乱数を毎回作り、直前の DPoP-Nonce を nonce クレームに入れる
  • nonce の欠落・期限切れ・再利用、または認可コード交換から refresh への切替では HTTP 400 use_dpop_nonce。新しい nonce で proof を作り直して再試行する
  • 署名不一致や使い回しの jti は invalid_dpop_proof
  • client_secret なしの SPA は CORS で DPoP-Nonce を扱えない。BFF を Confidential Client にし、access_type=offline でサーバ側に束縛する

既存の非束縛 refresh token を付け替えるには、付与の取り消し、または認可時の prompt=consent が必要。oauth2.googleapis.com は Token Exchange(RFC 8693)非対応で、多段エージェント委任は Google Cloud Secure Token Service(STS)で中間エージェント固有の短命トークンへ付け替える。

#参考文献