Type d'octroi de code d'autorisation

Utilisez ce type d'octroi pour obtenir un code à l'aide d'un serveur d'autorisation faisant office d'intermédiaire entre l'application client et le propriétaire de la ressource à l'aide de domaines d'identité.

Le diagramme suivant présente le flux Authorization Code Grant Type (Type d'octroi de code d'autorisation).

Diagramme illustrant le flux de type d'octroi de code d'autorisation.
Dans ce flux OAuth :
  1. Un utilisateur clique sur un lien dans une application client de serveur Web pour demander l'accès à des ressources protégées.

  2. L'application client redirige le navigateur vers l'adresse d'autorisation oauth2/v1/authorize avec une demande de code d'autorisation.

  3. Le serveur d'autorisation renvoie un code d'autorisation à l'application client via une redirection de navigateur une fois que le propriétaire de la ressource a donné son consentement.

  4. L'application client échange ensuite le code d'autorisation avec un jeton d'accès et souvent un jeton d'actualisation.

  5. Le serveur d'autorisation renvoie le jeton d'accès à l'application client.

  6. L'application client utilise le jeton d'accès dans un appel d'API pour obtenir des données protégées.
    Remarque

    Les informations d'identification du propriétaire de la ressource ne sont jamais visibles par le client.
Fonction Disponible
Nécessite une authentification client Non
Le client doit connaître les informations d'identification utilisateur Non
Interaction de l'utilisateur final basée sur un navigateur Oui
Peut utiliser un fournisseur d'identités externe pour l'authentification Oui
Jeton d'actualisation autorisé Oui
Le jeton d'accès se trouve dans le contexte de l'utilisateur final Oui

Reportez-vous à un exemple de exemple de flux d'autorisation de type d'octroi de code d'autorisation.

Exemple de flux d'autorisation de type d'octroi de code d'autorisation

Cet exemple de flux d'autorisation vous guide tout au long d'une demande de connexion OpenID Connect à l'aide d'un code d'autorisation.

Ce flux est un flux OAuth à trois acteurs, qui fait référence à des scénarios dans lesquels l'application appelle les API de domaine d'identité au nom des utilisateurs finaux et dans lesquels le consentement de l'utilisateur est parfois requis. Ce flux montre comment configurer l'accès avec connexion unique fédéré entre un domaine d'identité et une application personnalisée à l'aide de OAuth 2.0 et d'OpenID Connect.

Lorsque vous créez une application à l'aide du type d'octroi Code d'autorisation dans la console du domaine d'identité, procédez comme suit :

  • Indiquez Application sécurisée comme type d'application.

  • Sélectionnez Code d'autorisation comme type d'octroi.

  • Indiquez l'URI de réacheminement où les réponses aux demandes d'authentification sont envoyées.

  • Vous pouvez éventuellement sélectionner le type d'octroi Jeton d'actualisation pour renvoyer un jeton d'actualisation avec le jeton d'accès.

Pour plus d'informations sur le type d'octroi Code d'autorisation et un diagramme de flux d'autorisation, reportez-vous à Type d'octroi Code d'autorisation.

Flux d'autorisation

  1. Un utilisateur clique sur un lien dans l'application client du serveur Web (Customer Quotes), demandant l'accès à des ressources protégées.

  2. L'application Customer Quotes redirige le navigateur vers l'adresse d'autorisation de domaine d'identité (oauth2/v1/authorize) avec une demande de code d'autorisation.

    L'URL de demande contient des paramètres de requête qui indiquent le type d'accès demandé.
    Remarque

    Une valeur nonce est une chaîne aléatoire cryptographiquement forte que vous utilisez pour empêcher la réutilisation des réponses interceptées.

    Exemple de demande : client confidentiel/de confiance

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234

    Exemple de demande : client confidentiel/de confiance incluant un jeton d'actualisation dans la demande

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid%20<Resource
    Server Scope>%20offline_access&nonce=<nonce-value>&state=1234

    Exemple de demande : Client public

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234

    Exemple de demande effectuée avec PKCE

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234&code_challenge=<code-challenge>&code_challenge_method=<plain|S256>'
  3. Le domaine d'identité reçoit la demande et identifie que l'application Customer Quotes (identifiée par son client_id) demande un code d'autorisation pour obtenir plus d'informations sur le propriétaire de la ressource (portée openid).)

  4. Si l'utilisateur n'est pas déjà connecté, IAM demande à l'utilisateur de s'authentifier. IAM vérifie les informations d'identification de l'utilisateur.

  5. Si la connexion réussit, IAM redirige le navigateur vers l'application Customer Quotes avec un code d'autorisation.
    Remarque

    Si l'utilisateur ne s'authentifie pas, une erreur est renvoyée plutôt que le code d'autorisation.
  6. L'application Customer Quotes extrait le code d'autorisation et demande à un domaine d'identité d'échanger le code d'autorisation contre un jeton d'accès.

    Exemple de demande : client confidentiel/de confiance

       curl -i 
       -H 'Authorization: Basic <base64-clientid-secret>' 
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' 
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=authorization_code&code=<authz-code>'

    Exemple de demande : client public

       curl -i 
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' 
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=authorization_code&code=<authz-code>&redirect_uri=<client-redirect-uri>&client_id=<client-id>'

    Exemple de demande effectuée avec PKCE

       curl -i
       -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
       --request POST https://<domainURL>/oauth2/v1/token 
       -d 'grant_type=authorization_code&code=<authz-cod>e&redirect_uri=<client-redirect-uri>&client_id=<client-id>&code_verifier=<code-verifier>'
  7. IAM valide les données d'octroi et d'utilisateur associées au code (client_id, client_secret et le code d'autorisation).

  8. Un jeton d'accès et un jeton d'identité sont renvoyés. Le jeton d'accès contient des informations sur les portées que l'application Customer Quotes peut demander pour le compte de l'utilisateur. L'application peut utiliser ce jeton lors de la demande d'API pour le compte de l'utilisateur.

    Le jeton d'identité est extrait uniquement lorsque vous demandez la portée openid. Ce jeton contient des informations d'identification sur l'utilisateur et est utilisé pour l'authentification fédérée.

  9. L'application Customer Quotes traite id_token, puis extrait les informations de l'utilisateur renvoyées à partir d'IAM.

  10. Devis client affiche la page d'accueil contenant des informations sur l'utilisateur.