Skip to content
TDACorpIDENTITYSign in

Token claims

Every claim in an ID token, an access token and the userinfo response, with when it is present.

On this page

This page lists what is inside the tokens identity issues. Read the Sessions and tokens concept first if you want the picture of who receives which token. Verify a token with your SDK or Protect your API rather than decoding it by hand.

An optional claim is omitted, never sent as null. A claim that is absent can mean "not released to you" or "there is no value", and a client cannot tell the two apart. That is deliberate.

Access token#

An access token is a signed JWT with the header typ set to at+jwt (RFC 9068). It is signed with EdDSA, or ES256 for a client registered for it. It is issued to exactly one audience.

ClaimPresentMeaning
issAlwaysThe issuer address from discovery.
subAlwaysThe stable identifier of the person or service the token acts for. Always the real identifier, even for a client that sees a pairwise sub in its ID token.
audAlwaysOne value: the client id, or the one resource address the client asked for with resource (RFC 8707). Never a list.
client_idAlwaysThe client the token was issued to.
jtiAlwaysA unique token identifier.
iat, nbfAlwaysIssue time. nbf equals iat.
expAlwaysExpiry. exp minus iat is at most 900 seconds.
scopeAlwaysThe granted scopes, separated by spaces.
verAlwaysThe claim-shape version. The value is 2.
kindAlwaysThe kind of principal: human, service, workload or agent.
azpWhen the audience is a resource address, or the token came from a token exchangeThe client that asked for the token.
tid, tslugWhen an organization appliesThe organization id and its slug, whenever the sign-in belongs to an organization.
sidWhen a person's session is behind the tokenThe session id. It matches the sid in the ID token and in a back-channel logout token.
acr, amr, auth_timeWhen a person signed inThe assurance level, the methods used and the time of authentication. See Assurance and method values. Omitted on a client_credentials token, because no person authenticated.
cnfWhen the token is bound to a keyjkt for a DPoP key, or x5t#S256 for a certificate. Present for every client except a first-party web client.
authorization_detailsWhen the request carried themThe validated RFC 9396 details.
actOn an exchanged tokenThe actor, as sub and client_id, with earlier actors nested. The chain is at most three deep.
av, pv, pvt, rvWhen identity has a valueVersion counters identity uses to tell that an authorization decision has changed. rv is the organization's resource version and is present only with tid. Treat them as opaque.

There is no roles claim. See Authorization.

ID token#

An ID token tells the application who signed in and how. Its aud is always the client id, and it lives as long as the access token does.

ClaimPresentMeaning
iss, sub, aud, exp, iatAlwaysStandard claims. For a client registered with the pairwise subject type, sub is a value specific to the client's sector rather than the person's real identifier.
auth_timeAlwaysWhen the person authenticated, in seconds since the epoch.
acr, amrAlwaysAssurance level and methods.
sidAlwaysThe session id.
verAlwaysThe claim-shape version, 2.
nonceWhen the authorization request had oneEchoed unchanged.
tid, tslugWhen an organization appliesThe organization id and slug.

Profile claims are released by scope.

ScopeClaims released
profilename, locale, zoneinfo, preferred_username, picture, updated_at
emailemail, email_verified

Only a verified primary address is ever released as email. preferred_username is a display hint: it can change and be reused, so never key an account on it. picture is a link to the person's picture, versioned so a change shows up. A pairwise client is sent no picture.

Userinfo#

The userinfo endpoint answers with sub and the same profile claims, according to the scopes on the access token. For a pairwise client the sub is its pairwise value. Discovery lists more in claims_supported: sub, name, email, email_verified, locale, zoneinfo, preferred_username, picture, updated_at, tid, tslug, acr, amr, auth_time and sid. But tid, tslug, acr, amr, auth_time and sid are not returned by userinfo: they are claims of the ID token and the access token. Read the endpoint address from discovery; see OIDC endpoints.

Verified against commit 7ff8932