Le flow Authorization Code est le mode d’intégration principal de L’Identité Numérique La Poste.
Il permet :
Le flow repose sur un échange en plusieurs étapes :
👉 Ce flow est conforme au standard OpenID Connect.
Le partenaire redirige l’utilisateur vers LINLP.
GET /authorize
Paramètres principaux :
Exemple :
https://authent.pprod.lidentitenumerique.laposte.fr/auth/realms/partenaire/protocol/openid-connect/auth ?client_id=XXX &response_type=code &redirect_uri=https://monservice.fr/callback &scope=openid+profile+email &state=abc123 &nonce=xyz456
💡 `login_hint` permet de pré-remplir le téléphone utilisateur.
L’utilisateur :
👉 Le consentement des données est demandé si nécessaire.
Après succès :
https://monservice.fr/callback?code=ABC123&state=abc123
⚠️ Le code :
Le backend appelle :
POST /token
Exemple :
grant_type=authorization_code code=ABC123 redirect_uri=https://monservice.fr/callback
👉 Authentification requise via :
Réponse :
GET /userinfo Authorization: Bearer access_token
👉 Retour :
⚠️ Le partenaire doit impérativement stocker le id_token
👉 Pourquoi ?
👉 Cas d’usage :
💡 Contrairement à l’access_token, le id_token doit être conservé côté partenaire
| Cas | Comportement |
|---|---|
| Scope invalide | Redirection avec error=invalid_scope |
| client_id incorrect | Erreur 400 |
| redirect_uri incorrect | Erreur 400 |
| Cas | Comportement |
|---|---|
| Refus utilisateur | Retour page login |
| Timeout validation | Retour page login |
| Utilisateur inconnu | Timeout |
| Cas | Description |
|---|---|
| Code invalide | invalid_grant |
| Code expiré | invalid_grant |
| Mauvais client_secret | unauthorized_client |
| Cas | Description |
|---|---|
| Token invalide | invalid_token |
| Token expiré | accès refusé |
⚠️ Toujours utiliser un backend
⚠️ Vérifier le paramètre state
⚠️ Vérifier le nonce
⚠️ Vérifier la signature du id_token
⚠️ Gérer les expirations
⚠️ Journaliser les erreurs
⚠️ redirect_uri doit être strictement identique
⚠️ Les scopes doivent être déclarés en amont
⚠️ Le flow est synchrone côté utilisateur
⚠️ Les données retournées dépendent :
👉 Pour des cas avancés :