What's in the session token
- Written for
- + Written for
- Deprecated
- + Deprecated
- Applies to
- + Applies to
Atlas issues a short-lived RS256 session JWT (__session) that your backend verifies locally against Atlas's JWKS — no network call per request. This is the token a relying party trusts to identify the user.
How to verify it
JWKS:
https://<your-fapi-host>/.well-known/jwks.jsonIssuer (`iss`):
https://<your-fapi-host>(your custom FAPI host once live, else the Atlas host)Algorithm:
RS256only — pinalgorithms: ['RS256'].Lifetime: the access token is deliberately short (
jwtTtlSeconds, default 60s) and refreshed viatokenStrategy: refresh. Allow a few seconds of clock tolerance; refresh the token rather than wideningexpacceptance.
Standard claims
Claim | Meaning |
| Issuer — your FAPI origin. Verify it. |
| The Atlas user id ( |
| The session id — matches |
| Expiry / not-before / issued-at. |
| Authorized party, when set. |
| Sessions version — bumped by "sign out everywhere"; a stale |
| Whether this session passed a second factor. |
Conditional claims
`email` / `email_verified` — present when
auth_config.session.includeEmailClaimis on (default ON). Relying parties provision on first login from this; if you turn it off, reademail_addressesfrom the BAPI user object instead.Custom claims —
public_metadatayou set on the user (and, on the portable-self surface,progression/tier/flair) are projected into top-level session claims. See the host-side contract for the projection rules.
What a relying party does
Read the
__sessioncookie (parent-scoped to your registrable domain — see Cookies across your subdomains).Verify signature +
iss+expagainst JWKS.Provision/link the local user by
sub(+emailon first login).On expiry, refresh rather than re-authenticating.
Confirm the whole chain with the login-readiness probe.