====== OpenID Connect ======
===== Objectif =====
L’Identité Numérique La Poste repose sur le protocole **OpenID Connect (OIDC)**.
Ce standard permet à un service partenaire de :
* déléguer l’authentification utilisateur
* récupérer des informations d’identité sécurisées
* s’appuyer sur un mécanisme standard du marché
-----
===== Principe général =====
Le partenaire ne gère pas l’authentification directement.
👉 Il redirige l’utilisateur vers LINLP, qui :
* authentifie l’utilisateur (2FA)
* collecte son consentement
* renvoie les informations demandées
-----
===== Vue d’ensemble du flow =====
Le flow standard est le suivant :
- Appel du endpoint `/authorize`
- Authentification utilisateur (mobile)
- Redirection avec un **code d’autorisation**
- Appel du endpoint `/token`
- Récupération des tokens
- Appel du endpoint `/userinfo`
- Récupération des données utilisateur
-----
===== Endpoints principaux =====
^ Endpoint ^ Description ^
| /authorize | Authentification utilisateur |
| /token | Récupération des tokens |
| /userinfo | Récupération des données utilisateur |
-----
===== Étape 1 : /authorize =====
Le partenaire redirige l’utilisateur vers LINLP.
Paramètres principaux :
* client_id
* redirect_uri
* response_type=code
* scope
Exemple :
GET /authorize?response_type=code
&client_id=XXX
&redirect_uri=https://monservice.fr/callback
&scope=openid+profile+email
👉 L’utilisateur est alors authentifié via son application mobile.
-----
===== Étape 2 : récupération du code =====
Après authentification :
* LINLP redirige vers `redirect_uri`
* un paramètre `code` est ajouté
Exemple :
https://monservice.fr/callback?code=ABC123
⚠️ Ce code est temporaire et à usage unique.
-----
===== Étape 3 : /token =====
Le backend du partenaire échange le code contre des tokens.
POST /token
Paramètres :
* grant_type=authorization_code
* code
* redirect_uri
👉 Cette étape doit être faite côté backend.
-----
===== Étape 4 : tokens retournés =====
LINLP retourne :
* access_token → accès aux APIs
* id_token → données utilisateur (JWT signé)
-----
===== Étape 5 : /userinfo =====
Le partenaire récupère les données utilisateur :
GET /userinfo
Authorization: Bearer access_token
👉 Les données retournées dépendent des scopes demandés.
-----
===== Tokens =====
===== ID Token (JWT) =====
Le **id_token** contient :
* les données d’identité
* des informations de session
* une signature garantissant l’intégrité
👉 Il doit être vérifié avec la clé publique LINLP.
-----
===== Access Token =====
Le **access_token** permet :
* d’appeler l’API `/userinfo`
* d’accéder aux données utilisateur
-----
===== Bonnes pratiques =====
⚠️ Backend obligatoire
Ne jamais exposer `client_secret` côté frontend.
⚠️ Pas d’iframe
La page `/authorize` doit être appelée via redirection.
⚠️ Vérification des tokens
Toujours vérifier la signature du JWT.
⚠️ Stockage sécurisé
Les tokens doivent être stockés de manière sécurisée.
-----
===== Environnements =====
^ Environnement ^ URL ^
| Sandbox | https://authent.pprod.lidentitenumerique.laposte.fr |
| Production | https://authent.lidentitenumerique.laposte.fr |
-----
===== À retenir =====
* LINLP utilise OpenID Connect
* Le flow principal est **authorization_code**
* Toute l’authentification est externalisée
* Les données sont récupérées via tokens sécurisés
-----
===== Étape suivante =====
👉 Implémenter le flow complet :
[[integration:flow_authorization_code|Flow Authorization Code]]