Signing Every Request, Not Just the Refresh

Part of the Refresh Token Design series. The Gap Device Binding Left Binding the refresh token to a device means a copied refresh token is worth nothing on its own. Good. It also means the refresh token is now the better protected of the two credentials, and the access token, which is sent on every single request, is still a bearer secret. Anybody who captures one has five minutes of full access and needs nothing else. ...

August 2, 2026 · 7 min · 1395 words · Sagar Nayak

Binding a Refresh Token to the Device

Part of the Refresh Token Design series. The Actual Defect The previous post ended on a reframing worth repeating. Reuse detection was never really about token ordering. It was trying to answer “is this a different person” by looking at “has this token been seen”, which is a bad proxy, and the false logouts are the evidence. The real defect is that a refresh token is a bearer secret. Whoever holds the bytes is the session. Copy them out of storage, a log, a crash report, a proxy, and you are indistinguishable from the person they belong to. ...

July 19, 2026 · 6 min · 1247 words · Sagar Nayak