Différences
Ci-dessous, les différences entre deux révisions de la page.
| donnees:jwt_et_userinfo [2026/04/06 23:16] – créée mkessabi | donnees:jwt_et_userinfo [2026/04/07 00:40] (Version actuelle) – mkessabi | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | dsdfvsd | + | ====== 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 **/ | ||
| + | |||
| + | 👉 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 ===== | ||
| + | |||
| + | < | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== Payload ===== | ||
| + | |||
| + | < | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== 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 `/ | ||
| + | * 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: | ||
| + | </ | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== Exemple de réponse ===== | ||
| + | |||
| + | < | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ----- | ||
| + | |||
| + | ===== 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 : | ||
| + | |||
| + | [[tests: | ||