Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
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 ».
NdM : 2021/09/09 - Cette page est en cours de complément rédactionnel..
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.
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.
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.
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+--------+ +---------------+
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.
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) :
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.
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.
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.
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.
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 ].
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 +---------------+
Les étapes (C), (D), (E) et (F) sortent du cadre de ce spécification, comme décrit dans la section 7 .
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é.
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.
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.
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.
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 :
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 :
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.
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).
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
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 :
client_id
client_secret
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
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.
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.
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é.
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.
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.
Le flux illustré à la figure 3 comprend les étapes suivantes :
Le client construit l'URI de la demande en ajoutant ce qui suit paramètres au composant de requête de l'URI du point de terminaison d'autorisation en utilisant le format "application/x-www-form-urlencoded", selon l' annexe B :
response_type
client_id
redirect_uri
scope
(portée)
state
(état)
Le client dirige le propriétaire de la ressource vers l'URI construit à l'aide d'un réponse de redirection HTTP, ou par d'autres moyens à sa disposition via l'agent utilisateur.
Par exemple, le client demande à l'agent utilisateur d'effectuer la requête HTTP suivante à l'aide de TLS (avec des sauts de ligne supplémentaires à des fins d'affichage uniquement) :
Script avec 2 lignes
001GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 002Host: server.example.com
Si le propriétaire de la ressource accorde la demande d'accès, le serveur d'autorisation émet un code d'autorisation et le délivre au client en ajoutant les paramètres suivants au composant de requête de l'URI de redirection au format "application/x-www-form-urlencoded", selon l'annexe B :
code
state
(état)
Par exemple, le serveur d'autorisation redirige l'agent utilisateur en envoyant la réponse HTTP suivante :
Script avec 2 lignes
001HTTP/1.1 302 Found 002Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz
Le client DOIT ignorer les paramètres de réponse non reconnus. Les la taille de la chaîne du code d'autorisation n'est pas définie par ce spécification. Le client doit éviter de faire des hypothèses sur le code tailles de valeur. Le serveur d'autorisation DEVRAIT documenter la taille de toute valeur qu'il émet.
Le client fait une demande au point de terminaison du jeton en envoyant le paramètres suivants en utilisant le "application/x-www-form-urlencoded" format selon l' annexe B avec un codage de caractères UTF-8 dans le protocole HTTP request entity-body :
grant_type
code
redirect_uri
client_id
Si le type de client est confidentiel ou si le client a été émis client informations d'identification (ou d'autres exigences d'authentification assignées), le le client DOIT s'authentifier auprès du serveur d'autorisation comme décrit dans la section 3.2.1 .
Par exemple, le client effectue la requête HTTP suivante à l'aide de TLS (avec des sauts de ligne supplémentaires à des fins d'affichage uniquement) :
Script avec 7 lignes
001POST /token HTTP/1.1 002Host: server.example.com 003Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 004Content-Type: application/x-www-form-urlencoded 005 006grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA 007&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Le serveur d'autorisation DOIT :
Si la demande de jeton d'accès est valide et autorisée, le serveur d'autorisation émet un jeton d'accès et une actualisation facultative jeton comme décrit dans la section 5.1 . Si le client de la demande l'authentification a échoué ou n'est pas valide, le serveur d'autorisation renvoie une réponse d'erreur comme décrit dans la section 5.2 .
Exemple de réponse réussie :
Script avec 12 lignes
001HTTP/1.1 200 OK 002Content-Type: application/json;charset=UTF-8 003Cache-Control: no-store 004Pragma: no-cache 005 006{ 007 "access_token":"2YotnFZFEjr1zCsicMWpAA", 008 "token_type":"example", 009 "expires_in":3600, 010 "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", 011 "example_parameter":"example_value" 012}
Le type d'octroi (attribution) des identifiants de mot de passe du propriétaire de la ressource convient dans cas où le propriétaire de la ressource a une relation de confiance avec le client, tel que le système d'exploitation de l'appareil ou une application. Le serveur d'autorisation doit faire particulièrement attention lorsqu'il active ce type de octroi (attribution) et ne l'autoriser que lorsque les autres flux ne sont pas viable.
Ce type d'octroi (attribution) convient aux clients capables d'obtenir les informations d'identification du propriétaire de la ressource (nom d'utilisateur et mot de passe, généralement en utilisant un formulaire interactif). Il est également utilisé pour migrer les clients existants en utilisant des schémas d'authentification directe tels que HTTP Basic ou Digest, l'authentification à OAuth en convertissant les informations d'identification stockées en un jeton d'accès (access token).
Script avec 19 lignes
001Figure 5: Flux d'informations d'identification de mot de passe du propriétaire de la ressource (Resource Owner Password Credentials Flow) 002 003+----------+ 004| Resource | 005| Owner | 006| | 007+----------+ 008 v 009 | Resource Owner 010 (A) Password Credentials 011 | 012 v 013+---------+ +---------------+ 014| |>--(B)---- Resource Owner ------->| | 015| | Password Credentials | Authorization | 016| Client | | Server | 017| |<--(C)---- Access Token ---------<| | 018| | (w/ Optional Refresh Token) | | 019+---------+ +---------------+
Le flux illustré à la figure 5 comprend les étapes suivantes :
La méthode par laquelle le client obtient le propriétaire de la ressource informations d'identification est au-delà de la portée de cette spécification. Le client DOIT éliminer les informations d'identification une fois qu'un jeton d'accès a été obtenu.
Le client fait une demande au point de terminaison du jeton en ajoutant le paramètres suivants en utilisant le "application/x-www-form-urlencoded" format selon l' annexe B avec un codage de caractères UTF-8 dans le protocole HTTP request entity-body :
grant_type
username
password
scope
(portée)
Si le type de client est confidentiel ou si le client a été émis client informations d'identification (ou d'autres exigences d'authentification assignées), le client DOIT s'authentifier auprès du serveur d'autorisation comme décrit dans la section 3.2.1 .
Par exemple, le client effectue la requête HTTP suivante en utilisant la sécurité de la couche de transport (avec des sauts de ligne supplémentaires à des fins d'affichage uniquement) :
Script avec 6 lignes
001POST /token HTTP/1.1 002Host: server.example.com 003Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 004Content-Type: application/x-www-form-urlencoded 005 006grant_type=password&username=johndoe&password=A3ddj3w
Le serveur d'autorisation DOIT :
Étant donné que cette demande de jeton d'accès (access token) utilise le mot de passe du propriétaire de la ressource, le serveur d'autorisation DOIT protéger le point de terminaison contre attaques par force brute (par exemple, en utilisant la limitation du débit ou en générant alertes).
Si la demande de jeton d'accès est valide et autorisée, le serveur d'autorisation émet un jeton d'accès et une actualisation facultative jeton comme décrit dans la section 5.1 . Si la demande a échoué client authentification ou est invalide, le serveur d'autorisation renvoie un réponse d'erreur comme décrit dans la section 5.2 .
Exemple de réponse réussie :
Script avec 12 lignes
001HTTP/1.1 200 OK 002Content-Type: application/json;charset=UTF-8 003Cache-Control: no-store 004Pragma: no-cache 005 006{ 007 "access_token":"2YotnFZFEjr1zCsicMWpAA", 008 "token_type":"example", 009 "expires_in":3600, 010 "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", 011 "example_parameter":"example_value" 012}
Le client peut demander un jeton d'accès en utilisant uniquement son client informations d'identification (ou d'autres moyens d'authentification pris en charge) lorsque le client demande l'accès aux ressources protégées sous son contrôle, ou ceux d'un autre propriétaire de la ressource qui ont été précédemment arrangé avec le serveur d'autorisation (dont la méthode est au-delà la portée de cette spécification).
Le type d'octroi (attribution) d'informations d'identification client DOIT être utilisé uniquement par des clients confidentiels.
Script avec 8 lignes
001Figure 6: Flux d'informations d'identification du client (Client Credentials Flow) 002+---------+ +---------------+ 003| | | | 004| |>--(A)- Client Authentication --->| Authorization | 005| Client | | Server | 006| |<--(B)---- Access Token ---------<| | 007| | | | 008+---------+ +---------------+
Le flux illustré à la figure 6 comprend les étapes suivantes :
Étant donné que l'authentification du client est utilisée comme octroi (attribution) d'autorisation, aucune demande d'autorisation supplémentaire n'est nécessaire.
Le client fait une demande au point de terminaison du jeton en ajoutant le paramètres suivants en utilisant le "application/x-www-form-urlencoded" format selon l'annexe B avec un codage de caractères UTF-8 dans le protocole HTTP request entity-body :
grant_type
scope
(portée)
Le client DOIT s'authentifier auprès du serveur d'autorisation comme décrit à la section 3.2.1 .
Par exemple, le client effectue la requête HTTP suivante en utilisant la sécurité de la couche de transport (avec des sauts de ligne supplémentaires à des fins d'affichage uniquement) :
Script avec 6 lignes
001POST /token HTTP/1.1 002Host: server.example.com 003Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW 004Content-Type: application/x-www-form-urlencoded 005 006grant_type=client_credentials
Le serveur d'autorisation DOIT authentifier le client.
Si la demande de jeton d'accès est valide et autorisée, le serveur d'autorisation émet un jeton d'accès comme décrit dans la section 5.1 . Un jeton de rafraîchissement NE DEVRAIT PAS être inclus. Si la demande l'authentification du client a échoué ou n'est pas valide, le serveur d'autorisation renvoie une réponse d'erreur comme décrit dans la section 5.2 .
Exemple de réponse réussie :
Script avec 11 lignes
001HTTP/1.1 200 OK 002Content-Type: application/json;charset=UTF-8 003Cache-Control: no-store 004Pragma: no-cache 005 006{ 007 "access_token":"2YotnFZFEjr1zCsicMWpAA", 008 "token_type":"example", 009 "expires_in":3600, 010 "example_parameter":"example_value" 011}
Le client utilise un type d'octroi d'extension en spécifiant le type d'octroi en utilisant un URI absolu (défini par le serveur d'autorisation) comme valeur du paramètre "grant_type" du point de terminaison du jeton, et par en ajoutant tous les paramètres supplémentaires nécessaires.
.......... ..................
Lire la suite ici ;) https://datatracker.ietf.org/doc/html/rfc6749.html + VS ^^ la traduction FRançaise ;)