Utilisation de OAuth 2 pour accéder à l'API REST
L'API REST des domaines d'identité prend en charge les adresses compatibles SCIM 2.0 avec les schémas principaux SCIM 2.0 standard et les extensions de schéma Oracle pour gérer par programmation les utilisateurs, les groupes, les applications et les fonctions d'identité, telles que la gestion des mots de passe et les tâches d'administration. Pour effectuer des appels d'API REST vers votre domaine d'identité, vous devez utiliser un jeton d'accès OAuth2 pour l'autorisation. Le jeton d'accès fournit une session (avec portée et expiration) que votre application client peut utiliser pour effectuer des tâches dans un domaine d'identité.
Le diagramme de séquence suivant illustre un exemple de base du flux d'autorisation OAuth 2.0 permettant d'accéder à l'API REST des domaines d'identité.
Utilisez des paramètres OAuth 2.0 spécifiques lors de l'utilisation d'un domaine d'identité. Le tableau suivant décrit les paramètres les plus courants.
| Paramètre | Valeur | Commentaires |
|---|---|---|
|
En-têtes d'autorisation |
De base <base64_clientid_secret> |
Utilisé par le client comme modèle d'authentification de base pour transmettre le jeton d'accès dans un en-tête. La valeur du jeton d'accès doit être une valeur codée UTF-8 base64 de l'ID client et de la clé secrète client concaténée à l'aide du signe deux-points en tant que séparateur (par exemple, clientID:clientSecret). |
|
ID client |
<client_id> |
Obligatoire. Clé d'API unique générée lors de l'inscription de votre application dans la console du domaine d'identité. |
|
Clé secrète du client |
<client_secret> |
Obligatoire. Clé privée semblable à un mot de passe généré lors de l'inscription de l'application dans la console du domaine d'identité. Ne partagez pas cette valeur. |
|
URL de jeton d'accès |
/oauth2/v1/token |
Adresse utilisée pour obtenir un jeton d'accès à partir du domaine d'identité. |
|
URL d'authentification |
/oauth2/v1/authorize |
Adresse utilisée pour obtenir un code d'autorisation à partir de domaines d'identité, puis utilisée lors d'un flux OAuth à 3 branches. |
|
Type d'octroi |
client_credentials |
Obligatoire. Cela signifie que l'API REST appelée appartient à l'application client. |
|
Portée (obligatoire) |
urne:opc:idm :__myscopes__ |
Cette portée renvoie toutes les autorisations accordées à votre application. Si nécessaire, d'autres portées peuvent être utilisées pour obtenir des autorisations spécifiques. |
Etape 1 : inscription d'une application confidentielle dans des domaines d'identité à l'aide de la console
Lorsque vous enregistrez une application confidentielle dans la console de domaine d'identité, vous obtenez certains des paramètres clés dont vous avez besoin pour travailler avec OAuth 2.0 : ID client, clé secrète client et portées. OAuth 2.0 est une norme pour l'implémentation de l'autorisation déléguée et l'autorisation est basée sur le jeton d'accès requis pour accéder à une ressource. Le jeton d'accès peut être émis pour une portée donnée, qui définit ce que le jeton d'accès peut faire et les ressources auxquelles il peut accéder. Lorsque vous enregistrez une application Web dans un domaine d'identité, vous ajoutez des portées. Dans l'exemple suivant, les portées requises pour demander la recherche, la modification, la création et la suppression d'utilisateurs sont ajoutées. Toutefois, si vous deviez effectuer d'autres tâches (par exemple, gérer les événements d'audit), cela nécessiterait d'autres portées.
Pour créer et inscrire une application confidentielle, accédez à la console OCI, puis procédez comme suit :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité. Sous Identité, sélectionnez Domaines.
- Cliquez sur le nom du domaine d'identité dans lequel vous souhaitez travailler. Il est possible que vous deviez changer de compartiment pour trouver le domaine souhaité. Cliquez ensuite sur Applications intégrées.
- Sélectionnez Ajouter une application.
- Dans la boîte de dialogue Ajouter une application, sélectionnez Application confidentielle, puis Lancer le workflow.
- Sur la page Ajouter des détails d'application, entrez un nom et une description d'application, puis sélectionnez Suivant.
- Sur la page Configurer OAuth, sous Configuration client, sélectionnez Configurer cette application comme client maintenant.
- Sous Autorisation, sélectionnez uniquement Informations d'identification client comme type d'octroi autorisé.
- Au bas de la page, sélectionnez Ajouter des rôles d'application, puis Ajouter des rôles.
- Dans le panneau Ajouter des rôles d'application, sélectionnez Administrateur de domaine d'identité, puis Ajouter.
- Sélectionnez Suivant, puis Terminer.
- Sur la page des détails de l'application, faites défiler vers le bas jusqu'à Informations générales. Copiez l'ID client et la clé secrète client, puis stockez-les dans un endroit sécurisé.
- Une fois l'application créée, sélectionnez Activer.
Etape 2 : Base64 codage de l'ID client et de la clé secrète client
Avant le codage base64, l'URL encode individuellement l'ID client et la clé secrète client. Si votre ID client et votre clé secrète client ne contiennent pas de caractères spéciaux, vous n'êtes pas obligé de les encoder en premier. Cependant, en tant que meilleure pratique, nous le recommandons vivement.
Fenêtres
-
Lancez le Bloc-notes, puis collez l'ID client et la clé secrète du client dans le Bloc-notes.
-
Placez l'ID client et la clé secrète client sur la même ligne et insérez le signe deux-points entre eux :
clientid:clientsecretRemarque
Assurez-vous qu'aucun espace n'est l'attribut clientid:clientsecret. -
Enregistrez le fichier dans
C:\tempet nommez-leappCreds.txt.. -
Dans l'Explorateur Windows, cliquez avec le bouton droit de la souris sur
C:\temp, puis sélectionnez Invite CMD ici dans le menu contextuel. -
Entrez la commande suivante pour encoder l'ID client et la clé secrète client :
certutil -encode appCreds.txt appbase64Creds.txt -
Dans le Bloc-notes, ouvrez
C:\temp\appbase64Creds.txt, copiez son contenu, puis fermez le fichier.Remarque
Pour des raisons de sécurité, supprimez les fichiersappCreds.txtetappbase64Creds.txtune fois que vous avez terminé.
Mac et Linux
-
Lancez l'utilitaire de note de votre choix (par exemple, Mac Notes, Gedit Linux ou Vi), puis collez l'ID client et la clé secrète client dans l'utilitaire de note.
Placez l'ID client et la clé secrète client sur la même ligne et insérez le signe deux-points entre eux :
clientid:clientsecret.Remarqueinstruction.
Assurez-vous qu'aucun espace n'est présent dans clientid:clientsecret.-
Copiez la ligne
clientid:clientsecret. -
Lancez un terminal et entrez la commande suivante, en remplaçant
clientid:clientsecretpar la valeur que vous avez copiée dans le presse-papiers.echo -n "clientid:clientsecret" | base64 -w 0Remarque
Pour Linux, ajoutez-w 0à la commande pour enlever les sauts de ligne. -
Copiez la valeur renvoyée.Remarque
Si la valeur renvoyée est divisée en plusieurs lignes, revenez à l'éditeur de texte et assurez-vous que les résultats sont sur une seule ligne sans retour à la ligne.
Etape 3 : obtention d'un jeton d'accès
L'étape suivante de ce processus consiste à demander le jeton d'accès.
-
Lancez une invite de commande.
-
Entrez la commande cURL ci-dessous, en remplaçant le texte entre crochets ( < > ) par les valeurs appropriées :
curl -i -H "Authorization: Basic <base64encoded clientid:secret>" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://<domainURL>/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"Remarque
Si vous utilisez un système d'exploitation UNIX, vous pouvez ajouter| awk -F"\"" '{print $4}'à la fin de la commande cURL pour analyser uniquement le jeton Bearer. Rappelez-vous simplement que l'expiration par défaut du jeton est de 3600 secondes à compter de l'heure de la demande.Remarque
Vous pouvez éventuellement exécuter la commande cURL suivante pour que la valeur de jeton d'accès soit accessible via une variable UNIX nomméeAccessTokenValuedans votre environnement :
Vous pouvez ensuite exécuter la commandeexport AccessTokenValue=`curl -i -H "Authorization: Basic <base64encoded clientid:secret>" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://<domainURL>/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" | awk -F"\"" '{print $4}' | tail -n +16`echo $AccessTokenValuepour obtenir la valeur du jeton d'accès.Texte entre crochets Valeur base64encoded clientid:secret Remplacez-les par les informations d'identification codées que vous avez générées dans la section Base64 Encode the client ID and client secret. Assurez-vous qu'aucun espace ne figure dans les informations d'identification clientid:clientsecret. IDCS_Service_Instance Remplacer par l'URL de votre domaine d'identité (par exemple, https://<domainURL>/).)Remarque
La portéeurn:opc:idm:__myscopes__de la commande est utilisée comme balise par les clients de domaine d'identité qui demandent des jetons d'accès à partir du serveur d'autorisation OAuth. Des jetons d'accès contenant toutes les portées de domaine d'identité applicables sont renvoyés en fonction des privilèges représentés par les rôles d'administrateur de domaines d'identité accordés au client demandeur et de l'utilisateur spécifié par la demande du client (le cas échéant). Cette portée n'est accordée directement à aucun rôle d'administrateur de domaines d'identité. -
Copiez la valeur
access_tokenà partir de la réponse. Veillez à copier uniquement le jeton réel, qui est la valeuraccess_tokenentre guillemets :Status: 200 "access_token":"eyJ4NXQiOiI4Wk. . ." "token":"Bearer", "expires_in":3600Remarque
La réponse inclut le paramètreexpires_in: 3600. Cela signifie que votre jeton n'est plus valide après une heure à compter du moment où vous le générez. Au bout d'une heure, vous devez actualiser le jeton ou en obtenir un nouveau. Pour actualiser le jeton, entrez la commande cURL ci-dessous, en remplaçant le texte entre crochets ( < > ) par les valeurs appropriées :curl -i -H "Authorization: Basic <base64 encoded client ID and secret>" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://<domainURL>/oauth2/v1/token -d "grant_type=refresh_token&refresh_token=<token_value>"
Etape 4 : Création d'une demande REST pour l'environnement
Une fois le jeton d'accès OAuth 2.0 obtenu, vous pouvez l'utiliser dans une commande cURL pour envoyer une demande REST à l'API REST des domaines d'identité. La commande suivante renvoie la liste des utilisateurs d'un domaine d'identité.
curl -X GET
-H "Content-Type:application/scim+json"
-H "Authorization: Bearer <access_token>"
https://<domainURL>/admin/v1/Users
| Elément | Valeur |
|---|---|
| Méthode | -X OBTENIR |
| Type de contenu - En-tête | -H "Type de contenu:application/scim-json" |
| En-têtes d'autorisation | -H "Autorisation : porteur <access_token>" |
| Protocole HTTP | HTTP ou HTTPS (HTTP est recommandé) |
| Domaine d'identité | URL du domaine d'identité (par exemple, https://<domainURL>).) |
| Adresse REST de domaines d'identité | /admin/v1/Users |
Exemple de sortie JSON à partir de l'API REST des domaines d'identité
A l'étape précédente, la demande REST envoyée à l'aide de cURL a renvoyé une réponse au format JSON. JSON est une norme ouverte qui peut être formatée ou analysée en fonction de vos besoins, par exemple pour obtenir les attributs spécifiques requis par votre application.
{
"schemas": [
"urn:scim:api:messages:2.0:ListResponse"
],
"totalResults": 1,
"Resources": [
{
"displayName": "admin opc",
"name": {
"givenName": "admin",
"formatted": "admin opc",
"familyName": "opc"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"userName": "admin@example.com",
"id": "d252a54d83c344eb8f59f7053a0562ce",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"active": true,
"nickName": "TAS_TENANT_ADMIN_USER",
"emails": [
{
"verified": false,
"value": "admin@example.com",
"type": "work",
"primary": true
},
{
"verified": false,
"value": "admin@example.com",
"primary": false,
"type": "recovery"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"meta": {
"resourceType": "User",
"created": "2022-07-22T18:11:08Z",
"lastModified": "2022-07-25T21:19:28Z",
"location": "https://<domainURL>admin/v1/Users/d252a54d83c344eb8f59f7053a0562ce"
},
"idcsLastModifiedBy": {
"value": "idcssso",
"$ref": "https://<domainURL>admin/v1/Apps/idcssso",
"type": "App",
"display": "idcssso"
}
}
],
"startIndex": 1,
"itemsPerPage": 50
}