Utilisation de OAuth 2 pour accéder à l'API REST

L'API REST des domaines d'identité prend en charge les adresses conformes à SCIM 2.0 avec des schémas de base SCIM 2.0 standard et des extensions de schéma Oracle permettant de 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 avez besoin d'un jeton d'accès OAuth2 à utiliser 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 pour accéder à l'API REST des domaines d'identité.

Diagramme illustrant un exemple de base du flux d'autorisation OAuth 2.0 pour 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ête Autorisation

De base <base64_clientid_secret>

Utilisé par le client en tant que 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és à l'aide du signe deux-points comme séparateur (par exemple, clientID:clientSecret).

ID du client

<client_id>

obligatoire. Clé d'API unique générée lors de l'inscription de l'application dans la console du domaine d'identité.

Secret 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 des domaines d'identité, puis utilisée lors d'un flux OAuth à 3 acteurs.

Type d'octroi

client_credentials

obligatoire. Cela signifie que l'API REST appelée appartient à l'application client.

Portée (obligatoire)

ur: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 inscrivez une application confidentielle dans la console du domaine d'identité, vous obtenez certains des paramètres clés dont vous avez besoin pour utiliser 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 des recherches, des modifications, des créations et des suppressions 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 :

  1. Ouvrez le menu de navigation et cliquez sur Sécurité des identités. Sous Identité, cliquez sur Domaines.
  2. 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.
  3. Cliquez sur Ajouter une application.
  4. Dans la boîte de dialogue Ajouter une application, sélectionnez Application confidentielle, puis cliquez sur Lancer le workflow.
  5. Sur la page Ajouter des détails d'application, entrez un nom et une description d'application, puis cliquez sur Suivant.
  6. Sur la page Configurer OAuth, sous Configuration du client, sélectionnez Configurer cette application comme client maintenant.
  7. Sous Autorisation, sélectionnez uniquement Informations d'identification client dans Type d'octroi autorisé.
  8. Au bas de la page, sélectionnez Ajouter des rôles d'application, puis cliquez sur Ajouter des rôles.
  9. Dans le panneau Ajouter des rôles d'application, sélectionnez Administrateur de domaine d'identité, puis cliquez sur Ajouter.
  10. Cliquez sur Suivant puis sur Terminer.
  11. Sur la page de 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 emplacement sécurisé.
  12. Une fois l'application créée, cliquez sur Activer.

Etape 2 : Base64 encode l'ID client et la clé secrète du client

Vous devez encoder l'ID client et la clé secrète client lorsque vous l'incluez dans une demande de jeton d'accès.
Remarque

Avant l'encodage 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 par URL en premier. Cependant, en tant que meilleure pratique, nous le recommandons vivement.
Les sections suivantes vous indiquent comment base64 encode l'ID client et la clé secrète client au format UTF-8 à l'aide d'un environnement Windows et Mac/Linux.

Windows

  1. Lancez le Bloc-notes, puis collez l'ID client et la clé secrète du client dans le Bloc-notes.

  2. 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

    Remarque

    Assurez-vous qu'aucun espace n'est l'attribut clientid:clientsecret.
  3. Enregistrez le fichier dans C:\temp et nommez-le appCreds.txt.

  4. 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.

  5. Saisissez la commande suivante pour encoder l'ID client et la clé secrète client :
    certutil -encode appCreds.txt appbase64Creds.txt
  6. 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 fichiers appCreds.txt et appbase64Creds.txt une fois que vous avez terminé.

Mac et Linux

  1. Lancez votre utilitaire de note préféré (par exemple, Mac Notes, Gedit Linux ou Vi), puis collez l'ID client et la clé secrète client dans l'utilitaire de note.

  2. 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.

    Remarque

    Assurez-vous qu'aucun espace ne figure dans clientid:clientsecret.
    instruction.
  3. Copiez la ligne clientid:clientsecret.

  4. Lancez un terminal et entrez la commande suivante, en remplaçant clientid:clientsecret par la valeur que vous avez copiée dans le presse-papiers.

    echo -n "clientid:clientsecret" | base64 -w 0
    Remarque

    Sous Linux, ajoutez -w 0 à la commande pour enlever les sauts de ligne.
  5. 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 l'ensemble des résultats se trouvent sur une seule ligne sans renvoi à la ligne.

Etape 3 : obtention d'un jeton d'accès

L'étape suivante de ce processus consiste à demander le jeton d'accès.

  1. Lancez une invite de commande.

  2. Saisissez 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 que l'expiration par défaut du jeton est de 3600 secondes à partir de l'heure de la demande.
    Remarque

    Vous pouvez éventuellement exécuter la commande cURL suivante pour que la valeur du jeton d'accès soit accessible via une variable UNIX nommée AccessTokenValue dans votre environnement :
       export 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`
    Vous pouvez ensuite exécuter la commande echo $AccessTokenValue pour obtenir la valeur du jeton d'accès.
    Texte entre crochets Valeur
    base64encoded clientid:secret Remplacez-le 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 du domaine d'identité (par exemple, https://<domainURL>/).)
    Remarque

    La portée urn: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 au serveur d'autorisation OAuth. Les jetons d'accès qui contiennent toutes les portées de domaines 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 à 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é.
  3. Copiez la valeur access_token à partir de la réponse. Veillez à copier uniquement le jeton réel, qui est la valeur access_token entre guillemets :

    Status: 200
    "access_token":"eyJ4NXQiOiI4Wk. . ."
    "token":"Bearer",
    "expires_in":3600
    
    Remarque

    La réponse inclut le paramètre expires_in: 3600. Cela signifie que votre jeton n'est plus valide après une heure à partir de l'heure à laquelle vous l'avez généré. Au bout d'une heure, vous devez actualiser le jeton ou en obtenir un nouveau.

Etape 4 : création d'une demande REST pour l'environnement

Une fois que vous avez obtenu le jeton d'accès OAuth 2.0, vous pouvez utiliser le jeton 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
En-tête du type de contenu -H "Type de contenu:application/scim-json"
En-tête 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 des 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, comme l'obtention d'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
}