Quiz Entry - updated: 2026.10.22
What must the relying party check when it validates an ID token?
The signature (with the OP's key), that iss is the expected OP, that aud contains its own client ID, that the token has not expired (exp) and was issued recently (iat), and that the nonce matches the one it sent; optionally auth_time and acr against its policy.
In step 5 of the flow the RP must not simply decode the token and believe it. The checks, in a sensible order:
- Signature: verify it with the OP's public key from the
jwks_uri(or with the client secret for HS256), using the algorithm the RP expects, never blindly the one named in the header. - Issuer:
issexactly matches the issuer identifier from discovery. - Audience:
audcontains the RP's ownclient_id. Otherwise the token was issued to another application and could be a substituted token. - Time: the current time is before
exp;iatis not unreasonably old. - Nonce: if a nonce was sent, the claim equals the value stored in the user's session (anti-replay).
- Policy (optional):
auth_timeis recent enough ifmax_agewas requested;acrmeets the required authentication level.
Only then does the RP read sub and establish its own session. When the token comes directly from the token endpoint over TLS, the specification allows TLS server validation to stand in for the signature check, but checking it anyway is common practice.
Go deeper:
OpenID Connect Core 1.0: ID Token Validation — the complete normative checklist.
JSON Web Token (Wikipedia): Vulnerabilities — the
alg: noneand algorithm-confusion attacks that careless validation allows.