Files
zeekayandHanzo Dev 60b9474416 gateway: the edge writes identity headers, it does not mint them
Minting is issuing authority. IAM signs the token, and the signature is
where the authority is created. This edge VERIFIES a token and restates
what it proved as headers, so a transport that cannot carry a token can
read the same decision. Calling both operations "mint" put the issuer's
job and the edge's under one word, and a word that covers two operations
stops distinguishing them — a reader who thinks the edge mints reads it
as a second issuer.

So every use of `mint` for writing or stripping identity HEADERS becomes
`write`, which is already the leaf's own word (hanzoai/authz: "strips
every identity header on ingress and rewrites it from verified claims").
The identifiers follow: SetGatewayMinted/AssertGatewayMinted become
SetGatewayWritten/AssertGatewayWritten, mintIdentity becomes
writeIdentity, and waitlistMintedHeaders becomes waitlistHeaders — they
are simply the guard's own response headers, and the adjective added
nothing but the wrong verb.

`mint` stays where it is correct: IAM issuing a token, a sign-in issuing
a session cookie, commerce creating balance, and "the app the token was
minted through".

Two doc citations named symbols the migration removed and are re-pointed
at the live ones: edge.Mint to edge.Render, gatewayMintedIdentityHeaders
to authz.Headers.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-30 16:07:41 -07:00

29 lines
930 B
Go

package middleware
import (
"github.com/zap-proto/zip"
)
// StripIdentityHeaders strips client-supplied X-Org-Id / X-User-Id /
// X-User-Email / X-User-IsAdmin / X-Roles / X-User-Permissions from the
// request before any other middleware runs. Per HIP-0026, only the
// gateway-written path is trusted; everything else must be stripped to
// prevent client spoofing.
//
// Use this when a service runs WITHOUT a Hanzo gateway in front (rare).
// When deployed behind hanzoai/gateway, the gateway strips these
// unconditionally and rewrites from JWT — leave this middleware OFF in
// that topology.
func StripIdentityHeaders() zip.Handler {
return func(c *zip.Ctx) error {
req := c.Fiber().Request()
req.Header.Del("X-Org-Id")
req.Header.Del("X-User-Id")
req.Header.Del("X-User-Email")
req.Header.Del("X-User-IsAdmin")
req.Header.Del("X-Roles")
req.Header.Del("X-User-Permissions")
return c.Continue()
}
}