- 1Discover
GET {iss}/.well-known/openid-configuration → jwks_uri - 2Select key
JWKS key whose kid matches the header - 3Verify signature
alg on an allowlist (RS256), never none
- 4Issuer
iss == expected issuer, exact match - 5Audience
aud contains my client_id or audience - 6Freshness
exp in future, iat recent, nonce or jti unused - 7Subject
sub, repository_owner_id, environment match the trust policy
Every failure in this article involved a token that passed checks 1 to 3.
