JWT et userinfo
Objectif
Lors d’une authentification via LINLP, plusieurs éléments sont retournés :
- un id_token (JWT)
- un access_token
- un endpoint /userinfo
👉 Cette page explique leur rôle et leur utilisation.
Vue d’ensemble
| Élément | Rôle |
|---|---|
| id_token | Contient les données d’identité (JWT signé) |
| access_token | Permet d’appeler les APIs |
| /userinfo | Permet de récupérer les données utilisateur |
⚠️ Recommandation clé : conservation du id_token
⚠️ Le id_token doit être conservé par le partenaire.
👉 Il constitue :
- la preuve d’authentification de l’utilisateur
- une preuve horodatée et signée
- un élément vérifiable a posteriori
👉 En effet :
- le id_token est signé par LINLP
- il peut être vérifié à tout moment
- il ne dépend pas d’un appel API
💡 Cela permet :
- audit de sécurité
- traçabilité des connexions
- preuve en cas de litige
ID Token (JWT)
Le id_token est un JSON Web Token signé contenant :
- les données utilisateur (claims)
- des informations de session
- une signature garantissant l’intégrité
Structure d’un JWT
Un JWT est composé de 3 parties :
HEADER.PAYLOAD.SIGNATURE
Exemple de JWT (décodé)
Header
{
"alg": "RS256",
"typ": "JWT",
"kid": "abc123"
}
Payload
{
"sub": "075ccece-6699-4c08-80ca-27a6af136b68",
"given_name": "Jean Pierre",
"family_name": "Dupont",
"preferred_username": "Martin",
"birthdate": "1990-05-10",
"email": "jean.dupont@mail.com",
"iat": 1710000000,
"exp": 1710003600,
"iss": "https://authent.lidentitenumerique.laposte.fr",
"aud": "client_id"
}
Points importants
⚠️ Le payload est lisible Un JWT n’est pas chiffré, seulement signé.
⚠️ Ne jamais faire confiance sans vérification Toujours vérifier la signature.
Vérification du JWT
Le partenaire doit :
- récupérer la clé publique LINLP (JWKS)
- vérifier la signature
- vérifier les champs :
- `exp` (expiration)
- `iss` (issuer)
- `aud` (client_id)
Access Token
Le access_token :
- permet d’appeler `/userinfo`
- représente l’autorisation d’accès
👉 Il ne doit pas être utilisé directement pour lire les données.
Endpoint /userinfo
Permet de récupérer les données utilisateur via API :
GET /userinfo Authorization: Bearer access_token
Exemple de réponse
{
"sub": "075ccece-6699-4c08-80ca-27a6af136b68",
"given_name": "Jean Pierre",
"family_name": "Dupont",
"email": "jean.dupont@mail.com"
}
id_token vs userinfo
| Critère | id_token | /userinfo |
|---|---|---|
| Format | JWT | JSON |
| Signature | Oui | Non |
| Utilisation | Authentification | Données utilisateur |
Bonnes pratiques
⚠️ Conserver le id_token Il constitue une preuve d’authentification vérifiable.
⚠️ Toujours vérifier le JWT Signature + expiration obligatoires.
⚠️ Ne pas exposer les tokens Jamais côté frontend non sécurisé.
⚠️ Utiliser HTTPS uniquement Transport sécurisé obligatoire.
Points d’attention
⚠️ Le access_token est sensible À protéger comme un mot de passe.
Résumé
- id_token = identité + preuve d’authentification
- access_token = accès aux APIs
- /userinfo = récupération des données
- Le id_token doit être conservé pour audit et preuve
Étape suivante
👉 Tester l’intégration :