目的
v0.10.4 (#185) で追加したログにより根本原因が判明。
OAuthリフレッシュ時にWorker側KVからgrantが消失しており、{"error":"invalid_grant","error_description":"Grant not found"} で失敗する。
前提
@cloudflare/workers-oauth-provider v0.3.1
- Worker設定:
accessTokenTTL: 3600 (1h), refreshTokenTTL: 30 * 24 * 3600 (30d)
- ライブラリの
saveGrantWithTTL は { expiration: grantData.expiresAt } (絶対タイムスタンプ) でKVに保存
grantData.expiresAt は初回コード交換時に now + refreshTokenTTL (30日) で設定
- コード上は正しいが、実際には約1〜1.5時間後にKVエントリが消失
再現ログ (main.log)
16:10:38 [oauth] token refreshed successfully, expires in 3600s
17:47:15 [oauth] refresh failed: Token refresh failed: 400 Bad Request
— {"error":"invalid_grant","error_description":"Grant not found"}
調査済み候補
| 候補 |
状態 |
| ライブラリのsaveGrantWithTTL |
コード上は正しい(expiration: 30日の絶対タイムスタンプ) |
| completeAuthorization の既存grant全削除 |
新規認可時のみ。リフレッシュ間では発動しない |
| KVのeventual consistency |
1.5時間は長すぎ、一貫性問題ではない |
| Worker再デプロイによるKVクリア |
KVはデプロイで消えない |
制約
- Worker側のデバッグが必要(KV grant write/read/deleteのログ追加)
- ライブラリ自体のパッチではなく、Worker側のワークアラウンドを優先
tokenExchangeCallback は { newProps } のみ返却可能で、TTL延長には使えない
対象ファイル
worker/src/oauth.ts — tokenExchangeCallback、handleGitHubCallback
worker/src/index.ts — Worker main handler
- ライブラリ:
@cloudflare/workers-oauth-provider (v0.3.1)
次のステップ
- Worker側にKV grant操作のデバッグログ追加(wrangler tail で確認できるよう)
- grant作成時・リフレッシュ時のKV TTLを実測で確認
- 原因特定後、ワークアラウンドまたはライブラリアップストリーム報告
目的
v0.10.4 (#185) で追加したログにより根本原因が判明。
OAuthリフレッシュ時にWorker側KVからgrantが消失しており、
{"error":"invalid_grant","error_description":"Grant not found"}で失敗する。前提
@cloudflare/workers-oauth-providerv0.3.1accessTokenTTL: 3600(1h),refreshTokenTTL: 30 * 24 * 3600(30d)saveGrantWithTTLは{ expiration: grantData.expiresAt }(絶対タイムスタンプ) でKVに保存grantData.expiresAtは初回コード交換時にnow + refreshTokenTTL(30日) で設定再現ログ (main.log)
調査済み候補
制約
tokenExchangeCallbackは{ newProps }のみ返却可能で、TTL延長には使えない対象ファイル
worker/src/oauth.ts— tokenExchangeCallback、handleGitHubCallbackworker/src/index.ts— Worker main handler@cloudflare/workers-oauth-provider(v0.3.1)次のステップ