A3BC — Build digital trust. Together.
Français English
Documentation/Intégration OIDC/Vérifier les jetons

Vérifier les jetons

Contrôles à effectuer sur l'id_token et lecture des claims.

Contrôles de l’id_token

L’id_token est un JWT signé. Avant de faire confiance à son contenu :

  1. Vérifiez la signature avec les clés publiques du endpoint jwks_uri (indiqué par le discovery).
  2. Vérifiez iss (l’émetteur du discovery), aud (votre client_id) et exp.
  3. Vérifiez que nonce est celui de la transaction.
  4. Utilisez sub comme identifiant utilisateur propre à votre RP (aléatoire ou anonymisé, selon votre configuration).
{
  "iss": "https://oidc-sandbox.a3bc.io/",
  "aud": ["e251305f-5db8-11f1-8cb7-c8a3620c309f"],
  "sub": "f997cfff165741f98038628f103fedb3",
  "nonce": "OEozzDDlfS0qb0uidFVZVIRlBjDXUa",
  "iat": 1781853814,
  "exp": 1781854414,
  "given_name": "JOHN",
  "family_name": "DOE",
  "birthdate": "1978-03-12"
}

Le jeton contient aussi des claims techniques (at_hash, auth_time, jti, sid, rat).

Userinfo

Le endpoint userinfo renvoie, avec l’access_token, les mêmes informations que l’id_token.

Claims absents

Un claim demandé mais non disponible n’est pas une erreur. Vérifiez la présence de chaque claim dont dépend votre service. Pour les claims vérifiés, regardez aussi private:*_verified : il indique comment l’information a été acquise (document, openbanking…).

Exemple de vérification

import jwt  # PyJWT

jwks = jwt.PyJWKClient(JWKS_URI)  # jwks_uri du discovery
key = jwks.get_signing_key_from_jwt(id_token)
claims = jwt.decode(id_token, key.key, algorithms=["RS256"],
                    audience=CLIENT_ID, issuer=ISSUER)
assert claims["nonce"] == expected_nonce
import { createRemoteJWKSet, jwtVerify } from "jose";

const jwks = createRemoteJWKSet(new URL(JWKS_URI)); // jwks_uri du discovery
const { payload } = await jwtVerify(idToken, jwks, { issuer: ISSUER, audience: CLIENT_ID });
if (payload.nonce !== expectedNonce) throw new Error("nonce");
Lisez toujours jwks_uri, issuer et l’algorithme de signature dans le discovery : les valeurs ci-dessus sont des exemples.