Skip to content

Worker KV grant disappears after ~1h causing auth loop #187

@liplus-lin-lay

Description

@liplus-lin-lay

目的

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)

次のステップ

  1. Worker側にKV grant操作のデバッグログ追加(wrangler tail で確認できるよう)
  2. grant作成時・リフレッシュ時のKV TTLを実測で確認
  3. 原因特定後、ワークアラウンドまたはライブラリアップストリーム報告

Metadata

Metadata

Labels

bugSomething isn't workingin-progress着手中、実装または検証が進行中readybody converged for implementation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions