<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Refresh-Tokens on Hardcode Consulting</title>
    <link>https://blog.hardcodeconsulting.tech/tags/refresh-tokens/</link>
    <description>Recent content in Refresh-Tokens on Hardcode Consulting</description>
    <image>
      <title>Hardcode Consulting</title>
      <url>https://blog.hardcodeconsulting.tech/favicon.svg</url>
      <link>https://blog.hardcodeconsulting.tech/favicon.svg</link>
    </image>
    <generator>Hugo -- 0.167.0</generator>
    <language>en</language>
    <lastBuildDate>Sun, 09 Aug 2026 18:00:00 +0530</lastBuildDate>
    <atom:link href="https://blog.hardcodeconsulting.tech/tags/refresh-tokens/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Day Two Security Features Cancelled Out</title>
      <link>https://blog.hardcodeconsulting.tech/post/when-two-security-features-collide/</link>
      <pubDate>Sun, 09 Aug 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/when-two-security-features-collide/</guid>
      <description>Session branching and per request signing were both correct. Shipped together they made the recovery path unreachable by the only client that needed it.</description>
    </item>
    <item>
      <title>Branch the Session Instead of Narrowing It</title>
      <link>https://blog.hardcodeconsulting.tech/post/session-branching-instead-of-narrowing/</link>
      <pubDate>Sun, 26 Jul 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/session-branching-instead-of-narrowing/</guid>
      <description>A refresh that cannot prove its device should not touch the session it was presented against. Insert a new row, and let the real client collapse the rest.</description>
    </item>
    <item>
      <title>Binding a Refresh Token to the Device</title>
      <link>https://blog.hardcodeconsulting.tech/post/binding-refresh-tokens-to-the-device/</link>
      <pubDate>Sun, 19 Jul 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/binding-refresh-tokens-to-the-device/</guid>
      <description>A refresh token anybody can replay is a bearer secret. Binding it to a non-extractable WebCrypto key makes a copied token useless on its own.</description>
    </item>
    <item>
      <title>Dropping Reuse Detection Gave Two People One Session</title>
      <link>https://blog.hardcodeconsulting.tech/post/refresh-token-reuse-detection-tradeoff/</link>
      <pubDate>Sun, 12 Jul 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/refresh-token-reuse-detection-tradeoff/</guid>
      <description>Removing refresh token reuse detection looked like a small trade. It quietly lets a thief and the real user converge on one live pair, permanently.</description>
    </item>
    <item>
      <title>Refresh Token Rotation With a Previous Pair</title>
      <link>https://blog.hardcodeconsulting.tech/post/refresh-token-rotation-previous-pair/</link>
      <pubDate>Sun, 28 Jun 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/refresh-token-rotation-previous-pair/</guid>
      <description>Single use refresh tokens log people out when a response is lost. Keeping a previous pair on the session row fixes it without reopening unlimited minting.</description>
    </item>
    <item>
      <title>Your JWT Was Never Stateless</title>
      <link>https://blog.hardcodeconsulting.tech/post/jwt-was-never-stateless/</link>
      <pubDate>Sun, 21 Jun 2026 18:00:00 +0530</pubDate>
      <guid>https://blog.hardcodeconsulting.tech/post/jwt-was-never-stateless/</guid>
      <description>Every JWT system that must block a user ends up reading a database per request. Designing refresh token rotation around that, not against it.</description>
    </item>
  </channel>
</rss>
