Point d’extrémité de jeton (Token Endpoint)
https://oa.dnc.global/token
Plus de détails : API OpenID Connect : Point d’extrémité d’autorisation (Authorization Endpoint).
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.
Forme de la demande de jeton d’accès
La demande ne doit être effectuée que par la méthode POST.
Pour l’authentification de l’application cliente auprès du serveur d’autorisation, OAuthSD impose la méthode client_secret_basic. L’authentification est donc effectuée en utilisant l’authentification HTTP Basic (cf. section 2.3.1 de OAuth 2.0 [RFC6749]). Les identifiants client_id et client_secret sont ceux qui ont été définis lors de l’inscription de l’application cliente sur le serveur.
Les paramètres suivants sont postés :
grant_type : Type de flux d’autorisation, doit être "authorization_code".
code : le code d’autorisation reçu.
redirect_uri : (optionnel) l’adresse de retour à l’application cliente.
redirect_uri est utile lorsque plusieurs adresses de retour ont été enregistrées sur le serveur pour une même application cliente. Cet URI doit donc exactement correspondre à l’une d’elles.
Réponse du serveur
En cas de succès, le serveur retourne une réponse HTTP 200. Le corps de la réponse contient :
index | type | valeur |
---|---|---|
page | JSON array | access_token : (string) jeton d’accès OAuth 2.0 expires_in : (long) durée de vie en secondes token_type : (string) "Bearer" scope : (string) "openid ... " id_token : (string) jeton d’identification (JWT) |
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 sont décrites ici : API OpenID Connect : Point d’extrémité de jeton (Token Endpoint).
Demande du jeton de rafraîchissement
OpenID Connect ne retourne un jeton de rafraîchissement (Refresh Token), conjointement au jeton d’accès, que si le scope "offline_access" a été inclus dans la requête et accepté, ce qui ne se produira qu’avec le flux d’Autorisation via un code (Authorization Code Grant).
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
- $url = 'http://oa.dnc.global/token';
- 'grant_type' => 'authorization_code',
- 'code' => $authcode,
- 'redirect_uri' => 'http://chemindeleau.com/callback_openid.php',
- 'client_id' => 'chemin_openid',
- 'client_secret' => '01fc458',
- );
- $access_token = $result['access_token']; // Access Token
- $id_token = $result['id_token']; // ID Token (JWT)
L’authentification peut également être passée dans le Header comme ceci :
- 'grant_type' => 'authorization_code',
- 'code' => $sanitized_authcode,
- 'redirect_uri' => 'http://chemindeleau.com/callback_openid.php',
- );
- $client_id = 'chemin_openid';
- $client_secret = '01fc458';
SPIP
- $url = 'http://oa.dnc.global/oauth/token.php';
- 'method' => 'POST',
- 'grant_type' => 'authorization_code',
- 'code' => $authcode,
- 'redirect_uri' => 'http://chemindeleau.com/callback_openid.php',
- 'client_id' => 'chemin_openid',
- 'client_secret' => '01fc458',
- )
- );
- $res = recuperer_url($url, $options);
- $token = $page['access_token'];
- $id_token = $page['id_token'];