Données d'identification du client
Obtaining an access token for a privileged API client
Introduction
Dans ce guide, vous apprendrez comment une application peut utiliser un identifiant du client et un secret du client fournis pour obtenir un jeton d'accès OAuth à l'aide du flux d'octroi informations d'identification du client.
Un client d'API utilise le flux d'octroi client_credentials lorsqu'il doit effectuer des actions sans délégation de pouvoir de la part d'un utilisateur authentifié.
Le flux d'octroi de client_credentials est très simple. Le client envoie son identifiant et son secret au point de terminaison du jeton OAuth 2.0 d' IBM Security Verify et un jeton d'accès est renvoyé.
Prérequis
Avant qu'une application puisse obtenir un jeton d'accès à l'aide du flux d'octroi des informations d'identification du client, vous devez obtenir un identifiant et un secret de client pour votre application. Si vous disposez d'un accès administrateur à votre locataire Verify, consultez la rubrique Créer un client API privilégié. Sinon, vous devrez demander à un administrateur de le faire pour vous.
Pour utiliser les exemples curl de ce guide, vous aurez besoin de l'utilitaire curl
pour effectuer des appels HTTP aux API REST. Curl est préinstallé sur la plupart des systèmes Linux et sur MacOS. Toutefois, si nécessaire, vous pouvez télécharger curl ici.
Pour utiliser les exemples curl+jq de ce guide, vous aurez également besoin de l'utilitaire jq
pour analyser les réponses JSON des appels à l'API REST. Vous pouvez télécharger jq ici.
Variables
Les variables suivantes sont nécessaires pour exécuter le flux décrit dans ce guide :
Variables | Exemple de valeur | Description |
---|---|---|
uRL du locataire | tenant.verify.ibm.com | URL de votre locataire IBM Security Verify. |
client_id | 12345678-1234-1234-1234-123456789012 | L'identifiant du client généré par IBM Security Verify lors de la création du client API. |
client_secret | abcd1234 | Secret du client généré par IBM Security Verify lors de la création du client API. |
Si vous souhaitez utiliser ces variables en ligne de commande avec curl, vous devez les exporter à l'aide de ces commandes :
export tenant_url=tenant.verify.ibm.com
export client_id=12345678-1234-1234-1234-123456789012
export client_secret=abcd1234
Exécuter le flux
Le flux d'informations d'identification du client est un flux simple avec un appel au point de terminaison du jeton OAuth.
La requête HTTP a le format suivant :
POST /v1.0/endpoint/default/token HTTP/1.1
Host: {tenant_url}
Content-Type: application/x-www-form-urlencoded
Content-Length: xxx
grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}
La réponse de l'API REST a le format suivant :
{
"access_token":"xxxxxxxxxxxxxxxxxxxxxxx",
"grant_id":"xxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"token_type":"Bearer",
"expires_in":7200
}
Le jeton d'accès peut être extrait de l'élément access_token de la réponse.
Aucun jeton de rafraîchissement n'est renvoyé
Aucun jeton de rafraîchissement n'est renvoyé lors de l'utilisation du type de subvention client_credentials. Lorsque le jeton d'accès expire, le client demande simplement un nouveau jeton en exécutant à nouveau le flux client_credentials.
Utilisation de curl pour effectuer la requête
Vous pouvez effectuer la demande de jeton à l'aide de curl
:
curl -X POST https://${tenant_url}/v1.0/endpoint/default/token -d "client_id=${client_id}&client_secret=${client_secret}&grant_type=client_credentials"
La réponse JSON est renvoyée à la console. Vous pouvez copier le jeton d'accès à partir d'ici.
Utiliser jq pour analyser la réponse
Si vous disposez de l'utilitaire jq
, vous pouvez l'utiliser pour analyser la réponse JSON et extraire la valeur de l'access_token. Il peut ensuite être directement intégré dans la variable d'environnement access_token
pour une utilisation ultérieure :
export access_token=`curl -X POST https://${tenant_url}/v1.0/endpoint/default/token -d "client_id=${client_id}&client_secret=${client_secret}&grant_type=client_credentials" | jq -r .access_token`
echo ${access_token}
Utilisation de JavaScript
Vous pouvez exécuter le flux de type subvention client_credentials à l'aide de n'importe quel langage permettant d'effectuer des requêtes HTTP. Voici le code JavaScript qui permet d'obtenir un jeton d'accès :
//Pre-requisites
//var axios = require('axios');
//var qs = require('qs');
//var tenant_url = "Tenant URL";
//var client_id = "Client ID";
//var client_secret = "Client Secret";
var data = {
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': client_secret
};
var request = {
method: 'post',
url: 'https://' + tenant_url + '/oidc/endpoint/default/token',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data : qs.stringify(data)
};
axios(request).then((response) => {
var tokenData = response.data;
var access_token = tokenData.access_token;
console.log(access_token);
//Next code here.
}).catch((error) => {
console.log(error);
});
La valeur expires_in correspond au nombre de secondes avant l'expiration du jeton, mais l'heure à laquelle le jeton a été généré n'est pas enregistrée. Il est conseillé de convertir ce délai en un délai d'expiration absolu lors de la réception d'un nouveau jeton.
// Add absolute expiry time to the token data.
// Calculated from current time and expires_in
var date = new Date();
tokenData.expirytime = date.getTime() + (tokenData.expires_in * 1000);
Jon Harry, IBM Security
Updated about 1 month ago