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)で中間エージェント固有の短命トークンへ付け替える。