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 :

VariablesExemple de valeurDescription
uRL du locatairetenant.verify.ibm.comURL de votre locataire IBM Security Verify.
client_id12345678-1234-1234-1234-123456789012L'identifiant du client généré par IBM Security Verify lors de la création du client API.
client_secretabcd1234Secret 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