Point d’extrémité UserInfo
L’URI est la suivante :
https://oa.dnc.global/userinfo
Forme de la demande UserInfo
La méthode de transmission recommandée pour la transmission du jeton d’accès à UserInfo est HTTP Auth Header :
GET /userinfo HTTP/1.1
Host: oa.dnc.global/userinfo
Authorization: Bearer SlrqTTP7i88GkKGQWDbPs9RWVAnWHz5e7nxAV32hH
Exemples :
PHP
- // Méthode Auth Header
- if (!$res)
- echo "UserInfo Response:\n";
SPIP
- $url = "https://oa.dnc.global/userinfo";
- 'methode' => 'GET',
- 'datas' => 'Authorization: Bearer ' . $access_token,
- );
- $resource_response = recuperer_url($url, $options);
Exemple de requête avec la méthode POST. Notez que le jeton d’accès est fourni sans l’indication ’Bearer’ :
PHP
- // Méthode Post
- 'access_token' => $access_token,
- );
- curl_setopt($h, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); // semble facultatif : curl le fait pour nous?
- //*/
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 |
---|---|---|
status | entier | code HTTP |
headers | string | Headers de la réponse |
page | string | JSON Array : La réponse est détaillée ici : Réponse UserInfo. |
Note :
La valeur (string) "null" est forcée pour tous les champs vides ou NULL.
La spécification indique qu’il n’est pas garanti que la réponse UserInfo corresponde à l’utilisateur identifié par l’élément user_id du ID Token ID. Avant de considérer la réponse UserInfo comme valide, il convient de vérifier que la revendication user_id dans la réponse UserInfo Endpoint correspond exactement à la revendication user_id dans le Token ID.
Par ailleurs, la spécification impose de vérifier un ID Token dès sa réception. Ceci veut dire que toute requête Userinfo devrait suivre le cycle : demande d’autorisation, validation du jeton ID Token, demande Userinfo, vérification de la concordance des user_id. C’est ce qui est décrit dans les exemples.
Si la constante de configuration CHECK_CLIENT_IP est réglée à ’true’ (ce qui est fortement conseillé), et que la valeur de l’IP a été fournie lors de l’enregistrement de l’application cliente (ce qui est également conseillé), le contrôleur UserInfo vérifiera que l’IP de l’origine de la requête est conforme. Cela interdit à une application étrangère d’utiliser un jeton d’accès volé.
En cas d’échec, le corps de la réponse contient :
index | type | valeur |
---|---|---|
page | string | JSON Array : error : (string) titre de l’erreur, error_description : (string) 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 |
---|---|---|---|
400 | invalid_request | Only one method may be used to authenticate at a time (Auth header, GET or POST) | N’utiliser qu’une seule méthode d’authentification à la fois. |
400 | invalid_request | Malformed auth header | La requête de type Auth header est mal formée |
400 | invalid_request | When putting the token in the body, the method must be POST or PUT | Si on place le token dans le corps de la requête, la méthode ne peut être que POST ou PUT |
400 | invalid_request | The content type for POST requests must be "application/x-www-form-urlencoded | l’IETF spécifie ce type de contenu. NB : tous les serveurs Web ne remplissent pas cette variable _SERVER voir http://tools.ietf.org/html/rfc6750#section-2.2 |
401 | (vide) | (vide) | La requête ne comporte aucune authentification |
401 | invalid_token | The access token provided is invalid | Le jeton ne figure pas dans le tokenStorage du serveur. Très probablement une tentative de violation d’accès. |
401 | expired_token | The access token provided has expired | Le jeton a expiré. L’application doit obtenir un nouveau jeton et relancer la requête |
401 | malformed_token | Malformed token (missing "expires" | |
401 | malformed_token | Malformed token (missing "client_id") | |
403 | insufficient_scope | The request requires higher privileges than provided by the access token | L’application cliente n’a pas été inscrite avec le scope openid |