Qu'est-ce qu'OpenID Connect (OIDC) ?
La couche d'identité au-dessus d'OAuth 2.0 : comment une application apprend qui est l'utilisateur, grâce à un jeton d'identité signé.
- Nom complet
- OpenID Connect 1.0
- Publié par
- OpenID Foundation, 2014
- Dans TOSIAM
- Fournisseur (OP) et client (RP)
Sur cette page
OpenID Connect en bref#
OpenID Connect (OIDC) est un protocole d’authentification. Il permet à une application de déléguer la connexion de ses utilisateurs à un service spécialisé, le fournisseur d’identité, puis de recevoir la preuve que l’utilisateur s’est bien authentifié, avec quelques informations sur lui : identifiant, nom, adresse e-mail.
Quand vous cliquez sur « Se connecter avec… » sur un site, puis revenez connecté sans avoir créé de mot de passe, il y a de fortes chances qu’OpenID Connect soit à l’œuvre.
OIDC n’est pas un protocole indépendant : c’est une fine couche ajoutée à OAuth 2.0. Il en reprend les redirections, les endpoints et les jetons, et y ajoute ce qui manquait pour identifier l’utilisateur.
Pourquoi OIDC existe#
OAuth 2.0 répond à une question d’autorisation : « cette application a-t-elle le droit d’accéder à cette ressource ? ». Le jeton d’accès qu’il délivre est destiné à une API, et rien dans la norme ne dit comment l’application peut savoir qui l’a obtenu.
Avant OIDC, chaque fournisseur comblait ce vide à sa façon : un endpoint propriétaire pour lire le profil, un format de réponse maison, des règles de validation différentes. Une application qui voulait accepter plusieurs fournisseurs devait écrire une intégration par fournisseur.
OpenID Connect standardise trois choses :
- un jeton d’identité (ID token) au format JWT, signé par le fournisseur, qui décrit l’authentification ;
- un endpoint UserInfo qui renvoie les informations du profil ;
- une liste de scopes et de claims communs (
profile,email,address,phone…), pour que tous les fournisseurs parlent la même langue.
Les acteurs#
| Rôle | Nom OIDC | Exemple |
|---|---|---|
| La personne qui se connecte | Utilisateur final (End-User) | Une employée qui ouvre le portail RH |
| L’application qui a besoin de savoir qui est connecté | Partie de confiance (Relying Party, RP) | Le portail RH |
| Le service qui authentifie l’utilisateur et émet les jetons | Fournisseur OpenID (OpenID Provider, OP) | TOSIAM |
L’application ne voit jamais le mot de passe, le code TOTP ou la passkey de l’utilisateur : toute l’authentification se déroule chez le fournisseur. L’application reçoit seulement le résultat, sous une forme qu’elle peut vérifier.
Comment se déroule une connexion#
Le parcours recommandé est le flux Authorization Code avec PKCE. Il convient aussi bien à une application web classique qu’à une application mobile ou monopage.
- Utilisateur vers Application Clique sur « Se connecter »
-
Application vers Utilisateur
Redirige vers
/authorizeavecscope=openid, unstate, unnonceet uncode_challenge - Utilisateur vers TOSIAM Suit la redirection
- TOSIAM Authentifie l’utilisateur (mot de passe, passkey, MFA…)
- TOSIAM vers Utilisateur Redirige vers l’application avec un code à usage unique
-
Utilisateur vers Application
Transmet le code et le
state -
Application vers TOSIAM
Échange le code contre des jetons, avec le
code_verifier - TOSIAM vers Application Renvoie l’ID token, l’access token et, si demandé, un refresh token
- Application Vérifie l’ID token et ouvre la session
Quelques paramètres méritent qu’on s’y arrête :
scope=openidtransforme une demande OAuth 2.0 en demande OpenID Connect. Sans lui, pas d’ID token.stateest une valeur aléatoire que l’application retrouve au retour : elle prouve que la réponse correspond bien à une demande qu’elle a émise, et protège contre les attaques CSRF.nonceest recopié par le fournisseur dans l’ID token. L’application vérifie qu’il correspond à celui qu’elle a envoyé, ce qui empêche de rejouer un ancien jeton.code_challengeetcode_verifier(PKCE) lient le code d’autorisation à l’application qui l’a demandé. Un code intercepté est inutilisable sans le secret qui l’accompagne.
Le jeton d’identité#
L’ID token est le cœur d’OpenID Connect. C’est un JWT signé par le fournisseur ; une fois décodé, sa partie centrale ressemble à ceci :
{
"iss": "https://login.example.fr/tosiam/oauth2/clients",
"sub": "b7c1e2a4-5f0d-4c3b-9a8e-2d6f1e0c7a93",
"aud": "portail-rh",
"iat": 1790496000,
"exp": 1790499600,
"auth_time": 1790495990,
"nonce": "n-0S6_WzA2Mj",
"acr": "mfa",
"amr": ["pwd", "otp"],
"email": "claire.martin@example.fr"
}| Claim | Signification |
|---|---|
iss | L’émetteur : l’adresse du fournisseur. Elle doit correspondre exactement à celle que l’application attend. |
sub | L’identifiant stable et unique de l’utilisateur chez ce fournisseur. C’est lui, et non l’e-mail, qui sert de clé. |
aud | Le destinataire : l’identifiant de l’application (client_id). Un jeton émis pour une autre application doit être refusé. |
exp, iat | Date d’expiration et date d’émission, en secondes depuis 1970. |
auth_time | Le moment où l’utilisateur s’est réellement authentifié. Utile pour exiger une connexion récente avant une opération sensible. |
nonce | La valeur envoyée par l’application dans la demande. |
acr, amr | Le niveau d’authentification atteint et les méthodes utilisées (mot de passe, code à usage unique…). |
Avant de faire confiance à un ID token, l’application vérifie sa signature avec les clés publiques du fournisseur, puis iss, aud, exp et nonce. Les bibliothèques OIDC font ces contrôles pour vous ; il suffit de ne pas les désactiver.
Scopes et claims#
Les scopes indiquent ce que l’application demande ; les claims sont les informations qu’elle reçoit. OpenID Connect définit quatre scopes standard en plus de openid :
| Scope | Claims obtenus |
|---|---|
profile | name, family_name, given_name, preferred_username, locale, zoneinfo… |
email | email, email_verified |
address | address |
phone | phone_number, phone_number_verified |
Ces claims peuvent figurer dans l’ID token, ou être lus à la demande sur l’endpoint UserInfo avec l’access token. Un fournisseur peut aussi exposer ses propres claims, par exemple un service ou un matricule.
Les endpoints d’un fournisseur#
Un fournisseur OIDC publie un document de découverte à une adresse fixe : l’adresse de l’émetteur suivie de /.well-known/openid-configuration. Ce document JSON liste tout ce qu’une application doit savoir pour s’y connecter. Dans la plupart des bibliothèques, il suffit donc de configurer l’adresse de l’émetteur, un client_id et une URL de retour.
| Endpoint | Rôle |
|---|---|
Autorisation (authorization_endpoint) | Reçoit la redirection du navigateur et authentifie l’utilisateur. |
Jeton (token_endpoint) | Échange le code contre les jetons, appelé de serveur à serveur. |
UserInfo (userinfo_endpoint) | Renvoie les claims de l’utilisateur, sur présentation d’un access token. |
Clés (jwks_uri) | Publie les clés publiques qui permettent de vérifier les signatures. |
Fin de session (end_session_endpoint) | Déconnecte l’utilisateur chez le fournisseur. |
Enregistrement (registration_endpoint) | Permet à une application de s’enregistrer elle-même comme client. |
OIDC, OAuth 2.0 et SAML#
| OAuth 2.0 | OpenID Connect | SAML 2.0 | |
|---|---|---|---|
| Question traitée | Autorisation : accéder à une API | Authentification : qui est l’utilisateur | Authentification et fédération |
| Jeton principal | Access token (format libre) | ID token (JWT) | Assertion XML signée |
| Format des échanges | JSON, formulaires HTTP | JSON, formulaires HTTP | XML |
| Terrain de prédilection | API, microservices | Applications web, mobiles et monopages | Applications d’entreprise existantes |
OIDC et SAML 2.0 remplissent la même fonction : permettre l’authentification unique entre organisations et applications. SAML reste très présent dans les applications d’entreprise ; OIDC s’est imposé pour les nouvelles applications, parce que JSON et JWT sont plus simples à manipuler que XML, en particulier sur mobile.
Bonnes pratiques#
- Utilisez le flux Authorization Code avec PKCE, y compris pour les applications monopages. Les flux « implicit » et « hybrid », qui font passer des jetons par l’URL du navigateur, sont déconseillés.
- Envoyez toujours un
stateet unnonce, et vérifiez-les au retour. - Vérifiez l’ID token avant de lui faire confiance, et identifiez l’utilisateur par le couple
iss+sub, jamais par son adresse e-mail seule. - Déclarez des URL de retour exactes chez le fournisseur, sans caractère générique.
- Récupérez les clés du fournisseur depuis
jwks_uriplutôt que de les copier en dur : elles changent lors d’une rotation.
OpenID Connect dans TOSIAM#
TOSIAM joue les deux rôles du protocole.
TOSIAM fournisseur (OP). Le service OAuth2 Provider, activé par royaume, fait de TOSIAM un fournisseur OpenID Connect complet. L’émetteur est l’adresse /oauth2 du serveur, suivie du nom du royaume pour un sous-royaume, par exemple https://login.example.fr/tosiam/oauth2/clients. Le document de découverte y ajoute /.well-known/openid-configuration et annonce notamment :
- les endpoints d’autorisation, de jeton, UserInfo, de clés (
/connect/jwk_uri), d’introspection et de fin de session (/connect/endSession) ; - l’enregistrement dynamique des clients (
/connect/register) ; - les requêtes d’autorisation poussées (PAR, endpoint
/par) ; - la déconnexion par canal arrière (back-channel logout) et la gestion de session (
check_session_iframe) ; - la signature des ID tokens en HS256 à HS512, RS256 à RS512 et ES256 à ES512.
Chaque application est déclarée comme un agent OAuth 2.0 dans le royaume : URL de retour, scopes, grant types, méthode d’authentification. Le contenu de l’ID token et de la réponse UserInfo se règle par un script de claims, qui peut lire le profil de l’utilisateur et ajouter vos propres claims. L’authentification elle-même est celle de TOSIAM : un graphe d’authentification peut exiger une passkey, un code TOTP ou une analyse de risque avant que le jeton ne soit émis.
TOSIAM client (RP). Dans un graphe, les nœuds OidcRedirectNode et OidcCallbackNode délèguent la connexion à un autre fournisseur OpenID Connect, par exemple l’annuaire d’un partenaire ou un fournisseur social. Ils utilisent le flux Authorization Code avec PKCE, puis lisent l’ID token reçu pour retrouver ou créer le compte local.
Pour aller plus loin#
- OpenID Connect Core 1.0, la spécification de référence
- OpenID Connect Discovery 1.0, le document de découverte
- OpenID Connect Back-Channel Logout 1.0
Mis à jour le