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)