<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AuthAction Blog</title>
    <link>https://www.authaction.com/blog.html</link>
    <atom:link href="https://www.authaction.com/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Practical writing on OAuth2, OpenID Connect, passkeys, and token security.</description>
    <language>en</language>
    <item>
      <title>Why JWT Signature Verification Fails: 8 Causes Worth Checking</title>
      <link>https://www.authaction.com/blog/why-jwt-signature-verification-fails.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/why-jwt-signature-verification-fails.html</guid>
      <pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate>
      <description>Your token looks fine, decodes cleanly, and still fails verification. Here are the eight things that actually cause it, in the order worth checking them.</description>
    </item>
    <item>
      <title>OAuth 2.0 vs OpenID Connect: What the Difference Actually Is</title>
      <link>https://www.authaction.com/blog/oauth2-vs-oidc.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/oauth2-vs-oidc.html</guid>
      <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
      <description>OAuth2 is authorization, OIDC is authentication built on top of it. Here's what that means concretely, and why using an access token to identify a user is a real vulnerability.</description>
    </item>
    <item>
      <title>What Actually Breaks When You Skip PKCE</title>
      <link>https://www.authaction.com/blog/what-breaks-without-pkce.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/what-breaks-without-pkce.html</guid>
      <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
      <description>PKCE is not just for mobile apps anymore. Here's the concrete attack it prevents, why the client secret doesn't save you, and why the spec now recommends it for every OAuth2 client.</description>
    </item>
    <item>
      <title>Passkeys vs MFA: Why Adding a Second Factor Isn't the Same as Removing the First</title>
      <link>https://www.authaction.com/blog/passkeys-vs-mfa.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/passkeys-vs-mfa.html</guid>
      <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
      <description>TOTP and SMS codes make phishing harder. Passkeys make it structurally impossible. The difference is origin binding, and it's worth understanding before choosing.</description>
    </item>
    <item>
      <title>redirect_uri_mismatch: Every Reason It Happens</title>
      <link>https://www.authaction.com/blog/redirect-uri-mismatch.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/redirect-uri-mismatch.html</guid>
      <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
      <description>The error says the URI doesn't match a registered value. Matching is exact string comparison, which makes the causes narrow and mostly invisible — trailing slashes, ports, casing, and encoding.</description>
    </item>
    <item>
      <title>Refresh Token Rotation and the Race Condition Nobody Warns You About</title>
      <link>https://www.authaction.com/blog/refresh-token-rotation.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/refresh-token-rotation.html</guid>
      <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
      <description>Rotation plus reuse detection is the right design. It also logs users out at random if your client can fire two refreshes at once — here's why, and the two ways to fix it.</description>
    </item>
    <item>
      <title>Where to Store Tokens in a Browser: An Honest Comparison</title>
      <link>https://www.authaction.com/blog/where-to-store-tokens-in-a-browser.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/where-to-store-tokens-in-a-browser.html</guid>
      <pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate>
      <description>localStorage, cookies, memory, or a backend-for-frontend. Every option trades XSS exposure against CSRF exposure and complexity — here's the actual tradeoff rather than the usual dogma.</description>
    </item>
    <item>
      <title>Rotating JWKS Signing Keys Without Locking Everyone Out</title>
      <link>https://www.authaction.com/blog/rotating-jwks-keys-without-downtime.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/rotating-jwks-keys-without-downtime.html</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Key rotation fails when the new key starts signing before consumers have seen it. The fix is an overlap window sized by your cache TTL and token lifetime — here's the sequence.</description>
    </item>
    <item>
      <title>Scopes, Roles, and Relationships: Picking the Right Authorization Model</title>
      <link>https://www.authaction.com/blog/scopes-vs-roles-vs-relationships.html</link>
      <guid isPermaLink="true">https://www.authaction.com/blog/scopes-vs-roles-vs-relationships.html</guid>
      <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
      <description>OAuth2 scopes answer what an application may do. Roles answer what a user may do. Neither answers whether this user may edit that specific document — and cramming it into a token is how you get 8KB headers.</description>
    </item>
  </channel>
</rss>
