Point d’extrémité de jeton (Token Endpoint)
https://oa.dnc.global/oauth/token.php
Le point d’extrémité de jeton est le point d’extrémité sur le serveur d’autorisation auquel s’adresse l’application cliente avec le code d’autorisation, l’ID client et le secret, pour obtenir un jeton d’accès.
C’est également à ce point qu’une application s’adresse pour Rafraîchir (actualiser) un jeton d’accès.
Forme de la demande de jeton d’accès
La demande ne doit être effectuée que par la méthode POST.
Les paramètres suivants doivent être postés :
grant_type : Type de flux d’autorisation, par exemple "authorization_code".
code : le code d’autorisation reçu.
client_id : l’ID de l’application cliente.
client_secret : le secret de l’application cliente.
Le client inclut également ses informations d’authentification telles que décrites à la section 2.3. du document [RFC6749].
Les valeurs données pour les paramètres grant_type, client_id et client_secret doivent correspondre aux valeurs définies lors de l’inscription de l’application cliente sur le serveur.
Notes :
Il existe une façon de demander un jeton sans transmetre les identifiants de l’application cliente : Demande d’autorisation avec JWT (JWT Bearer Authorization Grant).
Réponse du serveur
En cas de succès, le serveur retourne une réponse HTTP 200.
Le corps de la réponse contient un tableau portant les informations suivantes :
index | type | valeur |
---|---|---|
page | JSON array | access_token : jeton d’accès |
Le Header comporte, comme il se doit, la directive ’Cache-Control : no-cache, no-store’.
En cas d’échec, le corps de la réponse contient :
index | type | valeur |
---|---|---|
page | JSON Array | error : titre de l’erreur, error_description : description de l’erreur |
La réponse HTTP ainsi que les valeurs de error et error_description sont données par le tableau suivant :
Réponse | error titre de l’erreur |
error_description description de l’erreur |
Explication |
405 | invalid_request | The request method must be POST when requesting an access token | La méthode de la demande doit être POST lorsque vous demandez un jeton d’accès. Notez que le Header contient ’Allow : POST’ |
400 | invalid_request | The grant type was not specified in the request | Le type d’autorisation n’a pas été spécifié dans la demande |
400 | unsupported_grant_type | Grant type "X" not supported | Le Type d’autorisation "X" n’est pas supporté. |
400 | invalid_grant | X doesn\’t exist or is invalid for the client | Le type d’autorisation indiqué n’existe pas ou est invalide pour le client |
400 | unauthorized_client | The grant type is unauthorized for this client_id | Le type d’autorisation n’est pas autorisé pour ce client_id |
400 | invalid_scope | The scope requested is invalid for this request | La portée d’autorisation demandée est invalide pour cette demande |
400 | invalid_scope | The scope requested is invalid for this client | La portée d’autorisation demandée est valide pour ce client |
400 | invalid_scope | An unsupported scope was requested | La portée d’autorisation demandée n’est pas supportée |
Exemples de code
Données de la requête :
$AuthCode est le code d’autorisation obtenu à l’étape précédente et transmis à la page de CallBack
$client_id, $client_secret : Comme indiqué lors de l’inscription de l’application cliente sur le serveur d’autorisation.
PHP
- // Demander un jeton d'accès pour l'application
- $jeton = '';
- $url = 'https://oa.dnc.global/oauth/token.php';
- 'grant_type' => 'authorization_code',
- 'code' => $AuthCode ,
- 'client_id' => 'XXXXXX',
- 'client_secret' => 'XXXXXXXXXXX',
- );
- $token = $result['access_token'];
SPIP
- $jeton = '';
- $url = 'https://oa.dnc.global/oauth/token.php';
- 'method' => 'POST',
- 'grant_type' => 'authorization_code',
- 'code' => '$AuthCode',
- 'client_id' => 'XXXXXX',
- 'client_secret' => 'XXXXXXXXXXX',
- )
- );
- $res = recuperer_url($url, $options);
- $token = $page['access_token'];
Compléments à propos du type de flux JWT Bearer
Comme son nom l’indique, ce flux d’autorisation transporte un jeton JWT (JSON Web Token) au lieu d’un simple jeton opaque. Ce faisant, la validation du jeton est plus sûre et des informations sur l’application et l’utilisateur sont directement véhiculées par le jeton.
Le type de flux JWT Bearer réclame plus de paramètres dans la requête et effectue des vérifications concernant l’application cliente et l’utilisateur final.
En plus des paramètres décrits précédemment, JWT Bearer demande que le paramètre suivant lui soit posté :
assertion : Un jeton JWT.
Par exemple, dans le cas d’un flux d’autorisation (Authorization Code Grant) :
POST /token.oauth2 HTTP/1.1
Host: oa.dnc.global
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhtpZCI6IjE2In0.eyJpc3Mi.J9l-ZhwP.
Dans le cas d’un flux d’authentification d’une application cliente (Client Authentication), le contrôleur Token met en oeuvre l’interface ClientAssertionType. Il faut alors fournir (voir RFC 7523) :
client_assertion_type : urn:ietf:params:oauth:grant-type:jwt-bearer,
client_assertion : Un jeton JWT.
Par exemple :
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&
client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhtpZCI6IjE2In0.eyJpc3Mi.J9l-ZhwP.
En cas d’échec, la réponse HTTP ainsi que les valeurs de error et error_description sont données par le tableau suivant :
Réponse | error titre de l’erreur |
error_description description de l’erreur |
Explication |
400 | invalid_request | The request method must be POST when revoking an access token | La méthode de la demande doit être POST lorsque vous révoquez un jeton d’accès |
400 | invalid_request | Missing parameters : "assertion" required | Le parmètre assertion, passant le jeton JWT manque |
400 | invalid_request | JWT is malformed | |
400 | invalid_grant | Invalid issuer (iss) provided | |
400 | invalid_grant | Invalid subject (sub) provided | |
400 | invalid_grant | Expiration (exp) time must be present | |
400 | invalid_grant | JWT has expired | |
400 | invalid_grant | Expiration (exp) time must be a unix time stamp | |
400 | invalid_grant | JWT cannot be used before the Not Before (nbf) time | |
400 | invalid_grant | Not Before (nbf) time must be a unix time stamp | |
400 | invalid_grant | Invalid audience (aud) | Le paramètre audience ( Token Endpoint URI, URI du point de terminaison de jeton) est invalide |
400 | invalid_grant | JSON Token Identifier (jti) has already been used | |
400 | invalid_grant | Invalid issuer (iss) or subject (sub) provided | La clé publique n’a pas été trouvée pour le couple issuer (iss) - subject (sub) fourni par le jeton |
400 | invalid_grant | JWT failed signature verification |