<?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>authentication on Ikoma's Blog</title><link>https://blog.yusukeikoma.com/tags/authentication/</link><description>Recent content in authentication on Ikoma's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 15 Sep 2026 13:18:09 +0900</lastBuildDate><atom:link href="https://blog.yusukeikoma.com/tags/authentication/index.xml" rel="self" type="application/rss+xml"/><item><title>A Step-Up Challenge Is a 401, and Your Client Needs a Loop Guard</title><link>https://blog.yusukeikoma.com/posts/step-up-authentication-challenge-is-a-401/</link><pubDate>Tue, 15 Sep 2026 13:18:09 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/step-up-authentication-challenge-is-a-401/</guid><description>RFC 9470 lets an API tell a client that its access token was obtained with too weak or too old a login. Reading the RFC section by section, then building a toy server and client, shows what the document specifies (a 401 challenge, two parameters) and the three things it leaves to you: concurrent challenges, loops, and caches.</description></item><item><title>A WebSocket Origin Check Blocks Other Websites, Not Other Clients</title><link>https://blog.yusukeikoma.com/posts/websocket-origin-check-is-not-authentication/</link><pubDate>Thu, 10 Sep 2026 11:23:25 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/websocket-origin-check-is-not-authentication/</guid><description>The Origin header on a WebSocket handshake is set by browsers and can be set to anything by every other client. So an allow-list protects a cookie-authenticated browser session from other sites, and it proves nothing about who is connecting. A runnable server, a real headless-browser attack, and the handshake rule that follows.</description></item><item><title>Enable Refresh Token Rotation and Parallel Requests Can Log Users Out</title><link>https://blog.yusukeikoma.com/posts/refresh-token-rotation-concurrent-requests/</link><pubDate>Sun, 30 Aug 2026 13:34:18 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/refresh-token-rotation-concurrent-requests/</guid><description>Refresh token rotation turns a reused token into a theft alarm. A client that fires three requests with an expired access token and refreshes once per 401 presents the same refresh token three times, and trips that alarm on itself. This post breaks a naive client on purpose, fixes it with single-flight refresh and a stale check, and compares the alternatives: a server grace window, request gating, proactive refresh and sender-constrained tokens.</description></item><item><title>When a WebSocket Outlives Its Token</title><link>https://blog.yusukeikoma.com/posts/websocket-reauthentication-on-long-lived-connections/</link><pubDate>Fri, 21 Aug 2026 13:34:18 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/websocket-reauthentication-on-long-lived-connections/</guid><description>After the 101 response, no request carries credentials: the server remembers a verdict, not the evidence. This article follows one token through a browser handshake, shows what a page can and cannot see, and compares three ways to renew it (reconnect, in-band, out-of-band) with a runnable server, tests, and a headless-Chrome check.</description></item><item><title>Separate Authentication from What an Actor May Do</title><link>https://blog.yusukeikoma.com/posts/separate-authentication-and-authorization/</link><pubDate>Tue, 11 Aug 2026 17:14:04 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/separate-authentication-and-authorization/</guid><description>Designing API authentication and role-based authorization with actors, route permissions, and separate credentials for people and machines.</description></item></channel></rss>