====== Scopes et claims ======
===== Objectif =====
Les données retournées par L’Identité Numérique La Poste sont définies via les **scopes OpenID Connect**.
👉 Un scope correspond à un ensemble de données (claims) que le partenaire demande lors de l’authentification.
-----
===== Principe =====
Lors de l’appel `/authorize`, le partenaire précise les données souhaitées :
scope=openid+profile+email+phone
👉 LINLP retourne la donnée uniquement si les 3 conditions sont respectées :
* la donnée est demandée ou préconfigurée par défaut
* la donnée est autorisée dans le paramétrage LINLP
* la donnée est consentie par l’utilisateur
-----
===== Notions clés =====
^ Terme ^ Description ^
| Scope | Groupe de données |
| Claim | Donnée individuelle |
| id_token | Contient des claims |
| /userinfo | Retourne des claims |
-----
===== ⚠️ Donnée non vérifiée : nom d’usage =====
⚠️ **Le champ `preferred_username` (nom d’usage) n’est pas une donnée vérifiée par LINLP.**
* Cette donnée est **saisie librement par l’utilisateur**
* Elle **n’est pas contrôlée** lors de la vérification d’identité
* Elle est **souvent absente ou non à jour** sur les pièces d’identité
👉 En conséquence :
* elle **ne doit pas être utilisée comme donnée d’identité de référence**
* elle doit être considérée comme **indicative uniquement**
-----
===== Scopes disponibles =====
===== Scope openid =====
^ Claim ^ Description ^ Format ^ Exemple ^
| sub | Identifiant unique utilisateur | UUID | 075ccece-6699-4c08-80ca-27a6af136b68 |
-----
===== Scope profile =====
^ Claim ^ Description ^ Format ^ Exemple ^
| given_name | Prénoms | String | Jean Pierre |
| family_name | Nom de naissance | String | DUPONT |
| preferred_username | Nom d’usage **(non vérifié)** | String | MARTIN |
| gender | Sexe (Male / Female) | String | Male |
-----
===== Scope birth =====
^ Claim ^ Description ^ Format ^ Exemple ^
| birthdate | Date de naissance | YYYY-MM-DD | 1990-05-10 |
| birthplace | Code INSEE commune | String (5) | 75109 |
| birthdepartment | Département | String | 75 |
| birthcountry | Pays de naissance | String (5) | 99100 |
-----
===== Scope email =====
^ Claim ^ Description ^ Format ^ Exemple ^
| email | Adresse email | email | jean.dupont@mail.com |
| email_verified | Email vérifié | boolean | true |
-----
===== Scope phone =====
^ Claim ^ Description ^ Format ^ Exemple ^
| phone_number | Numéro de téléphone | +33XXXXXXXXX | +33601020304 |
| phone_number_verified | Téléphone vérifié | boolean | true |
-----
===== Scope nationality =====
^ Claim ^ Description ^ Format ^ Exemple ^
| nationality | Nationalité | JSON {code, label} | {"code":"FRA","label":"Française"} |
-----
===== Scope digital_identity_metadata =====
^ Claim ^ Description ^ Format ^ Exemple ^
| digital_identity_creation_date | Date de création identité | datetime | 2025-01-17T08:23:27.000Z |
| digital_identity_expiration_date | Date d’expiration | datetime | 2030-01-17T08:23:27.000Z |
-----
===== Scope identity_document_metadata =====
^ Claim ^ Description ^ Format ^ Exemple ^
| identity_document_mrz | Bande MRZ de la pièce d'identité | String | IDFRAXXXXXXX005<<<<<<<<<<<<<<<999999XXXXXXXXFRA<<<<<<<<<<<9XXXXXX<
"nationality": {
"code": "FRA",
"label": "Française"
}
-----
===== Téléphone structuré =====
"phone": {
"country_prefix": "+33",
"phone_number": "601020304"
}
-----
===== Prénoms détaillés =====
"splitted_given_name": {
"first_name": "Jean",
"middle_name": "Pierre Louis"
}
-----
===== Exemple de réponse (/userinfo) =====
{
"sub": "5577832670193",
"given_name": "Jean Pierre",
"family_name": "Dupont",
"preferred_username": "Martin",
"birthdate": "1990-05-10",
"email": "jean.dupont@mail.com",
"phone_number": "+33601020304"
}
-----
===== Bonnes pratiques =====
⚠️ Demander uniquement les données nécessaires
Respect du principe de minimisation.
⚠️ Ne pas utiliser le nom d’usage comme donnée fiable
Utiliser `family_name` comme référence.
-----
===== Points d’attention =====
⚠️ Les scopes doivent être validés en amont
Impossible de demander un scope non autorisé.
⚠️ Les formats sont normalisés
Respecter les formats (date, codes INSEE, etc.).
-----
===== Bon à savoir =====
💡 Toutes les données :
* sont transmises uniquement après consentement utilisateur
* peuvent évoluer selon le paramétrage du partenaire
-----
===== Résumé =====
* Les données sont pilotées par les scopes
* Les claims sont les données individuelles
* Les données sont retournées aux formats JWT et JSON
* Le nom d’usage est une donnée déclarative non vérifiée
-----
===== Étape suivante =====
👉 Comprendre les tokens :
[[donnees:jwt_et_userinfo|JWT et userinfo]]