Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b6XzpJxZ25cDyuw1Uk
10 lines
511 B
Plaintext
10 lines
511 B
Plaintext
alice logs in and gets refresh token A.
|
|
An attacker copies A out of a log file.
|
|
alice's app refreshes: A -> B (A is now USED).
|
|
the attacker replays A: HTTP 401 {"error":"invalid_grant","error_description":"The refresh token is not valid"}
|
|
the family after the replay:
|
|
token A hash 7131712c status REVOKED
|
|
token B hash 1c626483 status REVOKED
|
|
alice's app now presents B: HTTP 401 (the innocent holder is signed out too)
|
|
B's access token on /api/me, no sid check: HTTP 200 (still inside its 5 minutes)
|