Qu’est-ce qu’une requête d’authentification (Authentication request) ?
Bien que la signification d’une requête d’authentification puisse varier selon le contexte, nous nous concentrerons sur la définition dans la spécification OpenID Connect (OIDC). En OIDC, une requête d’authentification est une Demande d'autorisation (Authorization request) au serveur d’autorisation pour authentifier un utilisateur.
La définition standard semble très déroutante car des termes similaires, tels que “requête d’autorisation” (authorization request), sont utilisés. Cela est dû au fait que l’OIDC est construit au-dessus de OAuth 2.0 qui est principalement conçu pour l’autorisation, et l’OIDC hérite de la terminologie OAuth 2.0 et l’étend pour supporter l’authentification.
Pour clarifier, ajoutons un peu de contexte à la définition :
Une requête d’authentification (OpenID Connect) est une requête (d’autorisation OAuth 2.0) au serveur (d’autorisation OpenID Connect) pour authentifier un utilisateur.
Cela devient encore plus long ! Maintenant, supprimons toutes les parenthèses :
Une requête d’authentification est une requête au serveur pour authentifier un utilisateur.
Après avoir supprimé tous les attributs, la définition devient simple. Voici les détails des termes :
- Requête d’authentification (Authentication request) : Le terme de la spécification OIDC.
- Demande d'autorisation (Authorization request) : Le terme de la spécification OAuth 2.0. OIDC réutilise la spécification et l’étend.
- Serveur d'autorisation (Authorization server) : Le terme de la spécification OAuth 2.0. OIDC utilise également le terme OpenID Provider (OP) pour désigner la même entité capable d’authentifier les utilisateurs.
Dans les sections suivantes, nous utiliserons “OpenID Provider (OP)” pour désigner le serveur d’autorisation qui prend en charge OIDC.
Comment fonctionne une requête d’authentification ?
Lorsqu’une application cliente souhaite authentifier un utilisateur, elle initie une requête d’authentification à l’OpenID Provider (OP). Comme nous l’avons mentionné plus tôt, la requête d’authentification est également une requête d’autorisation dans OAuth 2.0 ; donc, certains types de grants OAuth 2.0 (flux) peuvent être utilisés pour compléter le processus d’authentification.
OIDC définit trois types de grants (flux) pour supporter l’authentification :
- Flux du code d'autorisation (Authorization code flow) : Le flux d’authentification le plus recommandé. Il est généralement utilisé avec Clé de preuve pour l'échange de code (Proof Key for Code Exchange, PKCE) pour une meilleure sécurité et convient à la plupart des applications.
- Flux implicite (Implicit flow) : Un flux simplifié qui est déprécié dans OAuth 2.1 en raison de problèmes de sécurité.
- Flux hybride (Hybrid flow) : Une combinaison du flux de code d’autorisation et du flux implicite.
La requête d’authentification est la première étape du flux d’authentification OIDC. Les paramètres réels à inclure et les étapes à suivre dépendent du flux que vous choisissez. Cliquez sur les noms des flux ci-dessus pour en savoir plus sur chaque flux.
Voici un exemple simplifié de requête d’authentification utilisant le flux de code d’autorisation :
Une fois que le client reçoit les tokens, il peut les utiliser (par exemple, Jeton d'accès (Access token) ) pour accéder à des ressources protégées (par exemple, une API) pour le compte de l’utilisateur.
Paramètres clés dans une requête d’authentification
Voici quelques paramètres clés dans une requête d’authentification :
response_type
: Le type de réponse que le client attend du serveur d’autorisation. Il peut êtrecode
pour le flux de code d’autorisation,id_token
pour le flux implicite, oucode id_token
pour le flux hybride.client_id
: L’identifiant du client délivré par l’OpenID Provider (OP).redirect_uri
: L’URI vers laquelle le serveur d’autorisation redirigera l’agent utilisateur après la requête d’authentification.scope
: Les scopes (permissions) demandés pour le Jeton ID (ID token) et le Jeton d'accès (Access token) .resource
: Le paramètre optionnel qui spécifie le Indicateur de ressource (Resource indicator) pour les ressources demandées. Le serveur d’autorisation doit supporter RFC 8707 pour utiliser ce paramètre.
Notez que les paramètres ci-dessus ne sont pas exhaustifs. Avant de faire une requête d’authentification, vous devriez vous référer à la liste complète des paramètres pour le flux spécifique que vous utilisez.