ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, Développement, OAuth 2.0 : Open Authorization

OAuth est un protocole libre qui permet d'autoriser un site web, un logiciel ou une application (dite « consommateur ») à utiliser l'API sécurisée d'un autre site web (dit « fournisseur ») pour le compte d'un utilisateur. OAuth n'est pas un protocole d'authentification, mais de « délégation d'autorisation ».

Author : O.Romain.Jaillet-ramey - lab3w (dot) orj (at) zw3b (dot) fr

NdM : 2021/09/09 - Cette page est en cours de complément rédactionnel..

OAuth : Protocole d'Autorisation

OAuth est un standard ouvert pour l'accès délégation, communément utilisé comme un moyen pour les utilisateurs d'Internet d'accorder l'accès aux sites Web ou à des applications, à leurs informations sur d'autres sites Web, mais sans leur donner les mots de passe.

Introduction

En règle générale, OAuth fournit aux clients un "accès délégué sécurisé" aux ressources du serveur au nom d'un propriétaire de ressource. Il spécifie un processus permettant aux propriétaires de ressources d'autoriser l'accès aux ressources de leur serveur à des tiers sans fournir d'informations d'identification.

Conçu spécifiquement pour fonctionner avec Hypertext Transfer Protocol (HTTP), OAuth permet essentiellement d'émettre des jetons d'accès à des clients tiers par un serveur d'autorisation, avec l'approbation du propriétaire de la ressource. Le tiers utilise alors le jeton d'accès pour accéder aux ressources protégées hébergées par le serveur de ressources.

En particulier, OAuth 2.0 fournit des flux d'autorisation spécifiques pour les applications Web, les applications de bureau, les téléphones mobiles et les appareils intelligents.

RFC 6749 - 1.1. Rôles :

OAuth définit quatre rôles :

L'interaction entre le serveur d'autorisation et le serveur de ressources dépasse le cadre de cette spécification. Le serveur d'autorisation peut être le même serveur que le serveur de ressources ou une entité distincte. Un seul serveur d'autorisation peut émettre des jetons d'accès acceptés par plusieurs serveurs de ressources.

RFC 6749 - 1.2. Flux de protocole :

Script avec 19 lignes

001Figure 1 : Flux de protocole abstrait (Abstract Protocol Flow)
002          
003+--------+                               +---------------+
004|        |--(A)- Authorization Request ->|   Resource    |
005|        |                               |     Owner     |
006|        |<-(B)-- Authorization Grant ---|               |
007|        |                               +---------------+
008|        |
009|        |                               +---------------+
010|        |--(C)-- Authorization Grant -->| Authorization |
011| Client |                               |     Server    |
012|        |<-(D)----- Access Token -------|               |
013|        |                               +---------------+
014|        |
015|        |                               +---------------+
016|        |--(E)----- Access Token ------>|    Resource   |
017|        |                               |     Server    |
018|        |<-(F)--- Protected Resource ---|               |
019+--------+                               +---------------+
Retirer les numéros de lignes

Le flux OAuth 2.0 abstrait décrit l'interaction entre les quatre rôles et comprend les étapes suivantes :

La méthode privilégiée par le client pour obtenir un octroi d'autorisation du propriétaire de la ressource (représenté dans les étapes (A) et (B)) est d'utiliser le serveur d'autorisation en tant qu'intermédiaire, ce qui est illustré dans Figure 3 dans la section 4.1.

RFC 6749 - 1.3. Octroi (Attribution) d'autorisation (Authorization Grant)

Un octroi (une attribution) d'autorisation est un justificatif représentant l'autorisation du propriétaire de la ressource (pour accéder à ses ressources protégées) utilisée par le client pour obtenir un jeton d'accès (token).
Cette spécification définit quatre types d'octroi (accord) :

  1. code d'autorisation (authorization code),
  2. implicite (implicit),
  3. Paire identifiant / mot de passemot de passe du propriétaire de la ressource - ses informations d'identification (resource owner password credentials)
  4. et les informations d'identification du client (client credentials) ainsi qu'un mécanisme d'extensibilité pour définir des types supplémentaires.
RFC 6749 - 1.3.1. Code d'autorisation (Authorization Code)

Le code d'autorisation est obtenu en utilisant un serveur d'autorisation en tant qu'intermédiaire entre le client et le propriétaire de la ressource. A la place de demander l'autorisation directement au propriétaire de la ressource, le client dirige le propriétaire de la ressource vers un serveur d'autorisation (via son user-agent tel que défini dans [ RFC2616 ]), qui à son tour dirige le propriétaire de la ressource au client avec le code d'autorisation.

Avant de rediriger le propriétaire de la ressource vers le client avec le code d'autorisation, le serveur d'autorisation authentifie le propriétaire de la ressource et obtient l'autorisation. Parce que le propriétaire de la ressource s'authentifie uniquement auprès du serveur d'autorisation, la ressource les informations d'identification du propriétaire ne sont jamais partagées avec le client.

Le code d'autorisation offre quelques avantages de sécurité importants, telles que la capacité d'authentifier le client, ainsi que la transmission du jeton d'accès directement au client sans le faire passer par l'agent utilisateur du propriétaire de la ressource et potentiellement l'exposer à d'autres, y compris le propriétaire de la ressource.

RFC 6749 - 1.3.2. Implicite (Implicit)

L'octroi (l'attribution) implicite (Implicit grants) est un flux de code d'autorisation simplifié optimisé pour les clients implémentés dans un navigateur utilisant un langage de script tel comme JavaScript. Dans le flux implicite, au lieu d'émettre au client un code d'autorisation, le client reçoit directement un jeton d'accès (à la suite de l'autorisation du propriétaire de la ressource). Le type de subvention est implicite, car aucune information d'identification intermédiaire (telle qu'une autorisation code) sont émis (et utilisés plus tard pour obtenir un jeton d'accès).

Lors de l'émission d'un jeton d'accès (access token) pendant le flux d'octroi implicite (implicit grant flow), le serveur d'autorisation (authorization server) n'authentifie pas le client. Dans certaines cas, l'identité du client peut être vérifiée via l'URI de redirection utilisé pour fournir le jeton d'accès (access token) au client. Le jeton d'accès peut être exposé au propriétaire de la ressource ou à d'autres applications ayant accès à l'agent utilisateur du propriétaire de la ressource.

Les octrois (les attributions) implicites (Implicit grants) améliorent la réactivité et l'efficacité de certains clients (comme un client implémenté en tant qu'application dans le navigateur), puisqu'il réduit le nombre d'allers-retours nécessaires pour obtenir un jeton d'accès (access token). Cependant, cette commodité doit être mise en balance des implications de sécurité de l'utilisation d'attributions (d'octrois) implicites (implicit grants), telles que celles décrites aux sections 10.3 et 10.16 , en particulier lorsque le le type d'octroi de code d'autorisation est disponible.

RFC 6749 - 1.3.3. Paire identifiant / mot de passe du propriétaire de la ressource - ses informations d'identification (Resource Owner Password Credentials)

Les informations d'identification du propriétaire de la ressource (c'est-à-dire le nom d'utilisateur et le mot de passe) peut être utilisé directement comme une autorisation pour obtenir un accès jeton (access token). Les informations d'identification ne doivent être utilisées que lorsqu'il y a un degré de confiance entre le propriétaire de la ressource et le client (p. le client fait partie du système d'exploitation de l'appareil ou d'un demande) et lorsque d'autres types d'octroi d'autorisation ne sont pas disponible (comme un code d'autorisation).

Même si ce type de subvention nécessite un accès client direct au informations d'identification du propriétaire de la ressource, les informations d'identification du propriétaire de la ressource sont utilisées pour une seule demande et sont échangés contre un jeton d'accès. Cette type de subvention peut éliminer le besoin pour le client de stocker le les informations d'identification du propriétaire de la ressource pour une utilisation future, en échangeant les informations d'identification avec un jeton d'accès de longue durée ou un jeton d'actualisation.

RFC 6749 - 1.3.4. Identifiants du client (Client Credentials)

Les informations d'identification du client (ou d'autres formes d'authentification client) peuvent être utilisé comme un octroi (une attribution) d'autorisation lorsque la portée de l'autorisation est limité aux ressources protégées sous le contrôle du client, ou à des ressources protégées préalablement aménagées avec l'autorisation serveur. Les informations d'identification du client sont utilisées comme octroi (attribution) d'autorisation généralement lorsque le client agit pour son propre compte (le client est également le propriétaire de la ressource) ou demande l'accès à des ressources sur la base d'une autorisation préalablement convenue avec le serveur d'autorisation.

RFC 6749 - 1.4. Jeton d'accès (Access Token)

Les jetons d'accès sont des informations d'identification utilisées pour accéder aux ressources protégées. Un le jeton d'accès est une chaîne représentant une autorisation délivrée au client. La chaîne est généralement opaque pour le client. Jetons représentent des étendues et des durées d'accès spécifiques, accordées par le propriétaire de la ressource, et appliqué par le serveur de ressources et l'autorisation serveur.

Le jeton peut désigner un identifiant utilisé pour récupérer l'autorisation informations ou peut contenir les informations d'autorisation dans un manière vérifiable (c'est-à-dire une chaîne de jeton composée de certaines données et d'un Signature). Informations d'authentification supplémentaires, qui vont au-delà la portée de cette spécification, peut être nécessaire pour client d'utiliser un jeton.

Le jeton d'accès fournit une couche d'abstraction, remplaçant différentsconstructions d'autorisation (par exemple, nom d'utilisateur et mot de passe) avec un seul jeton compris par le serveur de ressources. Cette abstraction permet émission de jetons d'accès plus restrictifs que l'octroi d'autorisation utilisé pour les obtenir, ainsi que la suppression du besoin du serveur de ressources pour comprendre un large éventail de méthodes d'authentification.

Les jetons d'accès peuvent avoir différents formats, structures et méthodes de utilisation (par exemple, propriétés cryptographiques) en fonction de la ressource exigences de sécurité du serveur. Attributs de jeton d'accès et les méthodes utilisées pour accéder aux ressources protégées dépassent le cadre de cette spécification et sont définis par des spécifications d'accompagnement telles comme [ RFC6750 ].

RFC 6749 - 1.5. Jeton d'actualisation (Refresh Token)

Les jetons d'actualisation (refresh token) sont des informations d'identification utilisées pour obtenir des jetons d'accès (access token). Rafraîchir les jetons (token) sont émis au client par le serveur d'autorisation et sont utilisés pour obtenir un nouveau jeton d'accès (access token) lorsque le jeton d'accès actuel (access token) devient invalide ou expire, ou pour obtenir des jetons d'accès (access token) supplémentaires avec une portée identique ou plus étroite (les jetons d'accès (access token) peuvent avoir une durée de vie et moins d'autorisations que celles autorisées par la ressource propriétaire). L'émission d'un jeton d'actualisation (resfresh token) est facultative à la discrétion du serveur d'autorisation (authorization server). Si le serveur d'autorisation (authorization server) émet une actualisation jeton (refresh token), il est inclus lors de l'émission d'un jeton d'accès (c'est-à-dire, l'étape (D) dans Figure 1).

Un jeton d'actualisation (refresh token) est une chaîne représentant l'autorisation accordée à le client par le propriétaire de la ressource. La chaîne est généralement opaque pour le client. Le jeton (token) désigne un identifiant utilisé pour récupérer le informations d'autorisation. Contrairement aux jetons d'accès (access token), les jetons d'actualisation (refresh token) sont destinés à être utilisés uniquement avec des serveurs d'autorisation et ne sont jamais envoyés aux serveurs de ressources.

Script avec 22 lignes

001Figure 2: Actualisation d'un jeton d'accès expiré (Refreshing an Expired Access Token)
002          
003+--------+                                           +---------------+
004|        |--(A)------- Authorization Grant --------->|               |
005|        |                                           |               |
006|        |<-(B)----------- Access Token -------------|               |
007|        |               & Refresh Token             |               |
008|        |                                           |               |
009|        |                            +----------+   |               |
010|        |--(C)---- Access Token ---->|          |   |               |
011|        |                            |          |   |               |
012|        |<-(D)- Protected Resource --| Resource |   | Authorization |
013| Client |                            |  Server  |   |     Server    |
014|        |--(E)---- Access Token ---->|          |   |               |
015|        |                            |          |   |               |
016|        |<-(F)- Invalid Token Error -|          |   |               |
017|        |                            +----------+   |               |
018|        |                                           |               |
019|        |--(G)----------- Refresh Token ----------->|               |
020|        |                                           |               |
021|        |<-(H)----------- Access Token -------------|               |
022+--------+           & Optional Refresh Token        +---------------+
Retirer les numéros de lignes

Les étapes (C), (D), (E) et (F) sortent du cadre de ce spécification, comme décrit dans la section 7 .

RFC 6749 - 1.6. Version TLS

Chaque fois que Transport Layer Security (TLS) est utilisé par ce spécification, la version (ou les versions) appropriée de TLS variera au fil du temps, sur la base du déploiement généralisé et de la sécurité connue vulnérabilités. Au moment d'écrire ces lignes, TLS version 1.2 [ RFC5246 ] est la version la plus récente, mais a une portée très limitée base de déploiement et pourrait ne pas être facilement disponible pour la mise en oeuvre. TLS version 1.0 [ RFC2246 ] est le plus largement version déployée et fournira l'interopérabilité la plus large.

Les implémentations PEUVENT également prendre en charge une sécurité supplémentaire de la couche de transport mécanismes qui répondent à leurs exigences de sécurité.

RFC 6749 - 1.7. Redirections HTTP

Cette spécification fait un usage intensif des redirections HTTP, dans lesquelles le client ou le serveur d'autorisation dirige le propriétaire de la ressource user-agent vers une autre destination. Alors que les exemples de ce spécification montrent l'utilisation du code d'état HTTP 302, tout autre méthode disponible via l'agent utilisateur pour accomplir cette redirection est autorisé et est considéré comme un détail de mise en œuvre.

RFC 6749 - 1.8. Interopérabilité (Interoperability)

OAuth 2.0 fournit un cadre d'autorisation riche avec des propriétés de sécurité. Cependant, en tant que riche et hautement extensible framework avec de nombreux composants facultatifs, à lui seul, ce spécification est susceptible de produire un large éventail de implémentations.

De plus, cette spécification laisse quelques composants requis partiellement ou totalement indéfini (par exemple, l'enregistrement du client, capacités du serveur d'autorisation, découverte des points de terminaison). Sans ces composants, les clients doivent être manuellement et spécifiquement configuré par rapport à un serveur d'autorisation et une ressource spécifiques serveur afin d'interopérer. Ce cadre a été conçu avec l'espoir clair que l'avenir les travaux définiront les profils prescriptifs et les extensions nécessaires pour obtenir une interopérabilité complète à l'échelle du Web.

RFC 6749 - 1.9. Conventions de notation (Notational Conventions)

Les mots clés The key words "MUST (DOIT)", "MUST NOT (NE DOIT PAS)", "REQUIRED (OBLIGATOIRE)", "SHALL (DEVRA)", "SHALL NOT (NE DEVRA PAS)", "SHOULD (DEVRAIT)", "SHOULD NOT (NE DEVRAIT PAS)", "RECOMMENDED (CONSEILL1Eacute;)", "MAY (PEUT)", and "OPTIONAL (OPTIONNEL)" dans cette spécification doivent être interprétés comme décrit dans [ RFC2119 ].

Cette spécification utilise la forme Augmented Backus-Naur Form Backus-Naur augmentée (ABNF) notation de [ RFC5234 ]. De plus, la règle URI-reference est inclus dans "Uniform Resource Identifier (URI): Generic Syntax" [ RFC3986 ].

Certains termes liés à la sécurité doivent être compris dans le sens défini dans la [ RFC4949 ]. Ces termes incluent, sans s'y limiter, "attack (attaque)", "authentication (authentification)", "authorization (autorisation)", "certificate (certificat)", "confidentiality (confidentialité)", "credential (identifiant)", "encryption (chiffrement)", "identity (identité)", "sign (signe)", "signature (signature)", "trust (confiance)", "validate (valider)" et "verify (vérifier)".

Sauf indication contraire, tous les noms et valeurs des paramètres de protocole sont sensibles à la case.

RFC 6749 - 2. Inscription des clients (Client Registration)

Avant d'initier le protocole, le client s'enregistre auprès du serveur d'autorisation. Les moyens par lesquels le client s'inscrit avec le serveur d'autorisation dépassent le cadre de ce spécification mais impliquent généralement une interaction de l'utilisateur final avec un code HTML formulaire d'inscription.

L'enregistrement du client ne nécessite pas d'interaction directe entre le client et le serveur d'autorisation. Lorsqu'il est soutenu par le serveur d'autorisation, l'enregistrement peut s'appuyer sur d'autres moyens pour établir la confiance et obtenir les propriétés requises du client (par exemple, URI de redirection, type de client). Par exemple, l'enregistrement peut être accomplie à l'aide d'une assertion auto-émise ou émise par un tiers, ou par le serveur d'autorisation effectuant la découverte du client à l'aide d'un canal de confiance.

Lors de l'enregistrement d'un client, le développeur client DOIT :

RFC 6749 - 2.1. Types de clients (Client Types)

OAuth définit deux types de clients, en fonction de leur capacité à s'authentifier en toute sécurité auprès du serveur d'autorisation (c'est-à-dire la capacité de préserver la confidentialité de leurs identifiants clients) :

La désignation du type de client est basée sur le serveur d'autorisation définition de l'authentification sécurisée et de son exposition acceptable niveaux d'informations d'identification des clients. Le serveur d'autorisation NE DEVRAIT PAS faire des hypothèses sur le type de client.

Un client peut être implémenté sous la forme d'un ensemble distribué de composants, chacun avec un type de client et un contexte de sécurité différents (par exemple, un client distribué avec à la fois un composant confidentiel basé sur un serveur et un composant public basé sur un navigateur). Si le serveur d'autorisation ne fournit pas de soutien à ces clients ou ne fournit pas conseils concernant leur inscription, le client DEVRAIT enregistrer chaque composant en tant que client distinct.

Cette spécification a été conçue autour du client suivant profils :

RFC 6749 - 2.2. Identifiant client (Client Identifier)

Le serveur d'autorisation délivre au client enregistré un client identifiant -- une chaîne unique représentant l'enregistrement informations fournies par le client. L'identifiant client n'est pas un secret; il est exposé au propriétaire de la ressource et NE DOIT PAS être utilisé seul pour l'authentification du client. L'identifiant client est unique à le serveur d'autorisation.

La taille de la chaîne d'identifiant client n'est pas définie par ce spécification. Le client doit éviter de faire des suppositions sur le taille de l'identifiant. Le serveur d'autorisation DEVRAIT documenter la taille de tout identifiant qu'il délivre.

RFC 6749 - 2.3. Authentification des clients (Client Authentication)

Si le type de client est confidentiel, le client et l'autorisation serveur établir une méthode d'authentification client adaptée au exigences de sécurité du serveur d'autorisation. L'autorisation le serveur PEUT accepter toute forme d'authentification client répondant à ses exigences de sécurité.

Les clients confidentiels reçoivent généralement (ou établissent) un ensemble de informations d'identification client utilisées pour l'authentification avec l'autorisation serveur (par exemple, mot de passe, paire de clés publique/privée).

Le serveur d'autorisation PEUT établir une méthode d'authentification client avec les clients publics. Cependant, le serveur d'autorisation NE DOIT PAS se fier sur l'authentification du client public dans le but d'identifier le client.

Le client NE DOIT PAS utiliser plus d'une méthode d'authentification dans chaque demande (request).

RFC 6749 - 2.3.1. Mot de passe client (Client Password)

Les clients en possession d'un mot de passe client PEUVENT utiliser le HTTP Basic schéma d'authentification tel que défini dans [ RFC2617 ] pour s'authentifier avec le serveur d'autorisation. L'identifiant client est encodé à l'aide du Algorithme de codage "application/x-www-form-urlencoded" par Annexe B , et la valeur encodée est utilisée comme nom d'utilisateur ; le client le mot de passe est codé à l'aide du même algorithme et utilisé comme le mot de passe. Le serveur d'autorisation DOIT prendre en charge le HTTP Basic schéma d'authentification pour authentifier les clients qui ont reçu un mot de passe client.

Par exemple (avec des sauts de ligne supplémentaires à des fins d'affichage uniquement) :

Script avec 1 ligne

001Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
Retirer les numéros de lignes

Alternativement, le serveur d'autorisation PEUT prendre en charge l'inclusion des informations d'identification du client dans le corps de la requête en utilisant les paramètres suivants :

Inclure les informations d'identification du client dans le corps de la requête à l'aide des deux paramètres n'est PAS RECOMMANDÉ et DEVRAIT être limité aux clients incapables d'utiliser directement le schéma d'authentification HTTP Basic (ou autre schémas d'authentification HTTP basés sur un mot de passe). Les paramètres ne peuvent être transmis dans le corps de la demande et NE DOIT PAS être inclus dans le demander l'URI.

Par exemple, une demande d'actualisation d'un jeton d'accès ( Section 6 ) en utilisantles paramètres du corps (avec des sauts de ligne supplémentaires à des fins d'affichage seul) :

Script avec 6 lignes

001POST /token HTTP/1.1
002Host: server.example.com
003Content-Type: application/x-www-form-urlencoded
004
005grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
006&client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw
Retirer les numéros de lignes

Le serveur d'autorisation DOIT exiger l'utilisation de TLS comme décrit dans Section 1.6 lors de l'envoi de demandes à l'aide d'une authentification par mot de passe.

Étant donné que cette méthode d'authentification client implique un mot de passe, lele serveur d'autorisation DOIT protéger tout point de terminaison l'utilisant contre attaques par force brute.

RFC 6749 - 2.3.2. Autres méthodes d'authentification (Other Authentication Methods)

Le serveur d'autorisation PEUT prendre en charge toute authentification HTTP appropriée système correspondant à ses exigences de sécurité. Lors de l'utilisation d'autres méthodes d'authentification, le serveur d'autorisation DOIT définir un correspondance entre l'identifiant du client (fiche d'enregistrement) et schéma d'authentification.

RFC 6749 - 2.3.3. Clients non enregistrés (Unregistered Clients)

Cette spécification n'exclut pas l'utilisation de clients non enregistrés. Cependant, l'utilisation de tels clients dépasse le cadre de cette spécification et nécessite une analyse de sécurité supplémentaire et un examen des son impact sur l'interopérabilité.

RFC 6749 - 3. Points de terminaison de protocole (Protocol Endpoints)

RFC 6749 - 3.1. Point de terminaison d'autorisation (Authorization Endpoint)

RFC 6749 - 3.1.1. Type de réponse (Response Type)
RFC 6749 - 3.1.2. Point de terminaison de redirection (Redirection Endpoint)
RFC 6749 - 3.1.2.1. Confidentialité de la demande de point de terminaison (Endpoint Request Confidentiality)
RFC 6749 - 3.1.2.2. Conditions d'inscription (Registration Requirements)
RFC 6749 - 3.1.2.3. Configuration dynamique (Dynamic Configuration)
RFC 6749 - 3.1.2.4. Point de terminaison non valide (Invalid Endpoint)
RFC 6749 - 3.1.2.5. Contenu du point de terminaison (Endpoint Content)

RFC 6749 - 3.2. Point de terminaison du jeton (Token Endpoint)

RFC 6749 - 3.2.1. Authentification des clients (Client Authentication)

RFC 6749 - 3.3. Portée du jeton d'accès (Access Token Scope)

RFC 6749 - 4. Obtention de l'autorisation (Obtaining Authorization)

Pour demander un jeton d'accès (access token), le client obtient l'autorisation du propriétaire de la ressource. L'autorisation est exprimée sous la forme d'un octroi (attribution) d'autorisation, que le client utilise pour demander l'accès jeton (access token). OAuth définit quatre types d'attribution : code d'autorisation, implicite, les informations d'identification mot de passe du propriétaire de la ressource et les informations d'identification du client. Ça fournit un mécanisme d'extension pour définir des types d'octrois (d'attributions) supplémentaires.

RFC 6749 - 4.1 Octroi (attribution) de code d'autorisation (Authorization Code Grant)

Le type d'octroi (d'attribution) de code d'autorisation est utilisé pour obtenir à la fois l'accès jetons (token access) et jetons d'actualisation (token refresh) et est optimisé pour les clients confidentiels. Puisqu'il s'agit d'un flux basé sur la redirection, le client doit être capable d'interagir avec l'agent utilisateur du propriétaire de la ressource (généralement un navigateur) et capable de recevoir des requêtes entrantes (via redirection) du serveur d'autorisation.

Script avec 29 lignes

001Figure 3: Flux de code d'autorisation (Authorization Code Flow)
002
003+----------+
004| Resource |
005|   Owner  |
006|          |
007+----------+
008     ^
009     |
010    (B)
011+----|-----+          Client Identifier      +---------------+
012|         -+----(A)-- & Redirection URI ---->|               |
013|  User-   |                                 | Authorization |
014|  Agent  -+----(B)-- User authenticates --->|     Server    |
015|          |                                 |               |
016|         -+----(C)-- Authorization Code ---<|               |
017+-|----|---+                                 +---------------+
018  |    |                                         ^      v
019 (A)  (C)                                        |      |
020  |    |                                         |      |
021  ^    v                                         |      |
022+---------+                                      |      |
023|         |>---(D)-- Authorization Code ---------'      |
024|  Client |          & Redirection URI                  |
025|         |                                             |
026|         |<---(E)----- Access Token -------------------'
027+---------+       (w/ Optional Refresh Token)
028
029Note: Les lignes illustrant les étapes (A), (B) et (C) sont divisées en deux parties lorsqu'elles traversent l'agent utilisateur. 
Retirer les numéros de lignes

Le flux illustré à la figure 3 comprend les étapes suivantes :