Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The redirect that never happens

2026-09-11. The plugin transport now refuses to follow redirects at all. This post explains the credential class behind that decision.

When an HTTP client follows a redirect, it re-sends the request to a new URL. The question is which headers travel along. Browsers strip Authorization across origins. That sounds sufficient until you list what real SDKs authenticate with: X-API-Key, Private-Token, X-Auth-Token, custom bearer schemes. Standard denylists do not cover them, and 2026 produced the CVEs to prove it: custom auth headers forwarded across origins in widely used clients, fixed only by moving to allowlists.

The safe posture is to never find out what your client forwards. The plugin transport sends redirect: "manual" and treats any 3xx as a refusal. A redirect from your own server is not followed either, because a compromised or DNS-rebound server turning a 200 into a 302 toward an attacker host is exactly the shape that harvests bearers. The failure mode is a loud network error, and the operator investigates a redirect that should not exist instead of rotating a token that already leaked.

Fail closed on the transport, argue about convenience later. Credentials are easier to keep than to revoke.