Skip to content

Fix OAuth refresh token persistence for non-rotating servers - #373

Merged
jancurn merged 1 commit into
mainfrom
claude/mcpc-issue-371-fix-lk0ji6
Aug 17, 2026
Merged

Fix OAuth refresh token persistence for non-rotating servers#373
jancurn merged 1 commit into
mainfrom
claude/mcpc-issue-371-fix-lk0ji6

Conversation

@jancurn

@jancurn jancurn commented Aug 17, 2026

Copy link
Copy Markdown
Member

Sessions no longer lose their saved OAuth refresh token when a non-rotating server omits refresh_token from the refresh response. The bridge's persistence callback rebuilt the keychain record from the raw response, erasing the stored token, so the session required a new mcpc login once the access token expired.

  • OAuthTokenManager now passes the effective refresh token (rotated or preserved) to the onTokenRefresh persistence callback, fixing the bridge and any future caller in one place
  • Added unit tests for the token manager covering omitted, rotated, and externally rotated refresh tokens

Fixes #371

https://claude.ai/code/session_018RBge8dGQAm7PJ5ap6FY7M

Non-rotating OAuth servers return refresh_token only during initial auth
and omit it from refresh responses. The bridge's onTokenRefresh callback
rebuilt the keychain record from the raw response, erasing the stored
refresh token, so the session died with an auth error once the access
token expired and required a fresh login.

OAuthTokenManager already tracks the effective refresh token internally;
it now passes it to the onTokenRefresh persistence callback, so every
caller (bridge and CLI) persists the preserved token. The CLI path's own
fallback stays as defense in depth.

Fixes #371

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018RBge8dGQAm7PJ5ap6FY7M
@jancurn
jancurn merged commit bdd01b0 into main Aug 17, 2026
7 checks passed
@jancurn
jancurn deleted the claude/mcpc-issue-371-fix-lk0ji6 branch August 17, 2026 10:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bridge erases stored refresh token when a non-rotating OAuth server omits refresh_token on refresh

3 participants