Skip to main content

Signed Header

Pomerium's signed header is the X-Pomerium-Jwt-Assertion header.

What is Signed Header?

Pomerium's signed header is the X-Pomerium-Jwt-Assertion header. After authorization, Pomerium creates and signs a short-lived JWT and sends it to the upstream application. The application validates the JWT signature and its issuer, audience, and time claims with Pomerium's public key. This is not the same as a browser signing arbitrary HTTP headers, and a digital signature is not encrypted with the private key. The upstream must prevent direct traffic that can bypass Pomerium or strip untrusted copies of the header.

Why it matters

Many upstream applications need verified user context after Pomerium authorizes a request. A signed assertion lets the application detect changed identity claims instead of trusting an unsigned header.

How it works

  1. Pomerium authenticates and authorizes the request, then creates a short-lived JWT from the approved identity context.
  2. Pomerium signs the JWT and sends it to the upstream application in X-Pomerium-Jwt-Assertion.
  3. The application validates the signature, issuer, audience, and time claims before it uses any claim.

Example

An internal dashboard validates X-Pomerium-Jwt-Assertion and uses the verified email and group claims to select the correct tenant view.

Pomerium boundary

Pomerium creates the signed JWT assertion after it authorizes a proxied request. Pomerium publishes verification keys, but the upstream application must validate the assertion and must reject traffic that bypasses Pomerium.

Limits and non-claims

  • A signed assertion cannot protect an upstream service that remains directly reachable through a bypass path.
  • The JWT is signed, not encrypted, so applications must avoid exposing or logging sensitive claims.
  • Incorrect issuer, audience, time, signature, or key-rotation handling can make validation unsafe.

Evaluation checklist

  • Which canonical bytes, algorithm, key, audience, and time values does the signature cover?
  • Does the trusted proxy remove every client-supplied copy before it sets the header?
  • Does the upstream validate authenticity and replay limits before it uses the identity for authorization?

Sources and further reading

Keep learning

Application and Service AccessIdentity and Authentication

JSON Web Token (JWT)

Learn how JSON Web Tokens carry signed or encrypted claims, which checks a receiver must make, and how Pomerium uses a signed identity assertion.

Learn this term
Agentic AccessIdentity and Authentication

Identity Propagation

Identity propagation carries verified information about the originating principal and, when needed, the acting service across request boundaries.

Learn this term
Application and Service Access

Route

In Pomerium, a route defines how a requester reaches a service behind Pomerium.

Learn this term
Application and Service Access

Stateless

A stateless service does not keep server-side session state between requests.

Learn this term

Get a Personalized Demo

Schedule a Call with a Pomerium Engineer

Get a Demo