OAuth 2 für den Zugriff auf die REST-API verwenden

Die REST-API für Identitätsdomains unterstützt SCIM 2.0-konforme Endpunkte mit Standard-SCIM 2.0-Core-Schemas und Oracle-Schemaerweiterungen, um Benutzer, Gruppen, Anwendungen und Identitätsfunktionen wie Kennwortverwaltung und administrative Aufgaben programmgesteuert zu verwalten. Um REST-API-Aufrufe an Ihre Identitätsdomain auszuführen, benötigen Sie ein OAuth2-Zugriffstoken zur Autorisierung. Das Zugriffstoken stellt eine Session (mit Geltungsbereich und Ablauf) bereit, mit der Ihre Clientanwendung Aufgaben in einer Identitätsdomain ausführen kann.

In den folgenden Abschnitten werden die Schritte beschrieben, die zur Verwendung eines OAuth-Clients mit einer Identitätsdomain für den Zugriff auf die REST-APIs erforderlich sind:

Das folgende Sequenzdiagramm veranschaulicht ein einfaches Beispiel für den Autorisierungsablauf OAuth 2.0 für den Zugriff auf die REST-API für Identitätsdomains.

Ein Diagramm, das ein einfaches Beispiel für den Autorisierungsablauf OAuth 2.0 für den Zugriff auf die REST-API für Identitätsdomains darstellt.

Verwenden Sie bestimmte OAuth 2.0-Parameter beim Arbeiten mit einer Identitätsdomain. Die folgende Tabelle beschreibt die am häufigsten verwendeten Parameter.

Parameter Value Kommentare

Autorisierungsheader

Basis <base64_clientid_secret>

Wird vom Client als Basisauthentifizierungsschema verwendet, um das Zugriffstoken in einem Header zu übertragen. Der Zugriffstokenwert muss ein base64 UTF-8-codierter Wert von Client-ID und Client Secret sein, der mit einem Doppelpunkt als Trennzeichen verkettet wird. Beispiel: clientID:clientSecret.

Client-ID

<client_id>

Pflichtfeld. Ein eindeutiger "API-Schlüssel", der generiert wird, wenn Sie Ihre Anwendung in der Identitätsdomainkonsole registrieren.

Client Secret

<client_secret>

Pflichtfeld. Ein Private Key, der einem Kennwort ähnelt, das generiert wird, wenn Sie Ihre Anwendung in der Identitätsdomainkonsole registrieren. Diesen Wert nicht freigeben.

Zugriffstoken-URL

/oauth2/v1/token

Ein Endpunkt, mit dem ein Zugriffstoken aus der Identitätsdomain abgerufen wird.

Authentifizierungs-URL

/oauth2/v1/authorize

Ein Endpunkt zum Abrufen eines Autorisierungscodes aus Identitätsdomains, der dann während eines 3-teiligen OAuth-Ablaufs verwendet wird.

Berechtigungstyp

client_credentials

Pflichtfeld. Das bedeutet, dass die aufgerufene REST-API der Clientanwendung gehört.

Bereich (erforderlich)

Urne:opc:idm:__myscopes__

Dieser Geltungsbereich gibt alle Berechtigungen zurück, die Ihrer Anwendung erteilt wurden. Bei Bedarf können andere Geltungsbereiche verwendet werden, um bestimmte Berechtigungen zu erhalten.

Schritt 1: Vertrauliche Anwendung mit der Konsole in Identitätsdomains registrieren

Wenn Sie eine vertrauliche Anwendung in der Identitätsdomainkonsole registrieren, erhalten Sie einige der Schlüsselparameter, die Sie für die Arbeit mit OAuth 2.0 benötigen: Client-ID, Client Secret und Geltungsbereiche. OAuth 2.0 ist ein Standard zur Implementierung der delegierten Autorisierung. Die Autorisierung basiert auf dem Zugriffstoken, das für den Zugriff auf eine Ressource erforderlich ist. Das Zugriffstoken kann für einen bestimmten Geltungsbereich ausgegeben werden, der definiert, welche Aktionen das Zugriffstoken ausführen kann und auf welche Ressourcen es zugreifen kann. Wenn Sie eine Webanwendung in einer Identitätsdomain registrieren, fügen Sie Geltungsbereiche hinzu. Im folgenden Beispiel werden die erforderlichen Geltungsbereiche hinzugefügt, um Benutzersuchen, -bearbeitungen, -erstellungen und -löschungen anzufordern. Wenn Sie jedoch andere Aufgaben ausführen würden, z.B. Auditereignisse verwalten, wären andere Geltungsbereiche erforderlich.

Um eine vertrauliche Anwendung zu erstellen und zu registrieren, greifen Sie auf die OCI-Konsole zu, und führen Sie dann die folgenden Schritte aus:

  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Identität und Sicherheit. Klicken Sie unter Identität auf Domains.
  2. Klicken Sie auf den Namen der Identitätsdomain, in der Sie arbeiten möchten. Möglicherweise müssen Sie das Compartment ändern, um die gewünschte Domain zu finden. Klicken Sie anschließend auf Integrierte Anwendungen.
  3. Klicken Sie auf Anwendung hinzufügen.
  4. Wählen Sie im Dialogfeld Anwendung hinzufügen die Option Verträge Anwendung aus, und klicken Sie auf Workflow starten.
  5. Geben Sie auf der Seite Anwendungsdetails hinzufügen einen Anwendungsnamen und eine Beschreibung ein, und klicken Sie auf Weiter.
  6. Wählen Sie auf der Seite OAuth konfigurieren unter Clientkonfiguration die Option Diese Anwendung jetzt als Client konfigurieren aus.
  7. Wählen Sie unter Autorisierung unter Zulässige Berechtigungstypen nur Clientzugangsdaten aus.
  8. Wählen Sie unten auf der Seite die Option Anwendungsrollen hinzufügen aus, und klicken Sie auf Rollen hinzufügen.
  9. Wählen Sie im Bereich Anwendungsrollen hinzufügen die Option Identitätsdomainadministrator aus, und klicken Sie auf Hinzufügen.
  10. Klicken Sie auf Weiter und dann auf Fertigstellen.
  11. Scrollen Sie auf der Seite mit den Anwendungsdetails nach unten zu Allgemeine Informationen. Kopieren Sie die Client-ID und das Client Secret, und speichern Sie sie an einem sicheren Ort.
  12. Klicken Sie nach dem Erstellen der Anwendung auf Aktivieren.

Schritt 2: Base64 Client-ID und Client Secret codieren

Sie müssen die Client-ID und das Client Secret codieren, wenn Sie sie in eine Anforderung für ein Zugriffstoken aufnehmen.
Hinweis

Vor der base64-Codierung codiert die individuelle URL die Client-ID und das Client Secret. Wenn Ihre Client-ID und Ihr Client Secret keine Sonderzeichen enthalten, müssen Sie diese nicht zuerst durch die URL codieren. Als Best Practice empfehlen wir es jedoch.
In den folgenden Abschnitten wird gezeigt, wie Sie die Client-ID und das Client Secret im UTF-8-Format mit einer Windows- und einer Mac/Linux-Umgebung mit base64 codieren.

Windows

  1. Starten Sie Notepad, und fügen Sie dann die Client-ID und das Client Secret in Notepad ein.

  2. Platzieren Sie die Client-ID und das Client Secret in derselben Zeile, und fügen Sie einen Doppelpunkt zwischen diesen ein: clientid:clientsecret

    Hinweis

    Stellen Sie sicher, dass das Attribut clientid:clientsecret keine Leerzeichen enthält.
  3. Speichern Sie die Datei in C:\temp, und benennen Sie die Datei appCreds.txt..

  4. Klicken Sie in Windows Explorer mit der rechten Maustaste auf C:\temp, und wählen Sie im Kontextmenü die Option CMD-Prompt hier aus.

  5. Geben Sie den folgenden Befehl ein, um die Client-ID und das Client Secret zu codieren:
    certutil -encode appCreds.txt appbase64Creds.txt
  6. Öffnen Sie in Notepad C:\temp\appbase64Creds.txt, kopieren Sie den Inhalt, und schließen Sie die Datei.
    Hinweis

    Löschen Sie aus Sicherheitsgründen die Dateien appCreds.txt und appbase64Creds.txt, nachdem Sie den Vorgang abgeschlossen haben.

Mac und Linux

  1. Starten Sie Ihr bevorzugtes Notizdienstprogramm (z. B. Mac Notes, Gedit Linux oder Vi), und fügen Sie dann die Client-ID und das Client Secret in das Notizdienstprogramm ein.

  2. Platzieren Sie die Client-ID und das Client Secret in derselben Zeile, und fügen Sie einen Doppelpunkt zwischen diesen ein: clientid:clientsecret.

    Hinweis

    Stellen Sie sicher, dass keine Leerzeichen in der clientid:clientsecret vorhanden sind.
    Anweisung.
  3. Kopieren Sie die Zeile clientid:clientsecret.

  4. Starten Sie ein Terminal, und geben Sie den folgenden Befehl ein. Ersetzen Sie clientid:clientsecret durch den Wert, den Sie in die Zwischenablage kopiert haben.

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

    Fügen Sie für Linux dem Befehl -w 0 hinzu, um Zeilenumbrüche zu entfernen.
  5. Kopieren Sie den zurückgegebenen Wert.
    Hinweis

    Wenn der zurückgegebene Wert in mehrere Zeilen aufgeteilt ist, kehren Sie zum Texteditor zurück, und stellen Sie sicher, dass sich die gesamten Ergebnisse in einer einzigen Zeile ohne Textumbruch befinden.

Schritt 3: Zugriffstoken abrufen

Der nächste Schritt in diesem Prozess besteht darin, das Zugriffstoken anzufordern.

  1. Starten Sie eine Eingabeaufforderung.

  2. Geben Sie den folgenden cURL-Befehl ein, und ersetzen Sie den Text in Klammern ( < > ) durch die entsprechenden Werte:

       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__"
    Hinweis

    Wenn Sie ein UNIX-BS verwenden, können Sie | awk -F"\"" '{print $4}' an das Ende des cURL-Befehls anhängen, um nur das Bearer-Token zu parsen. Denken Sie daran, dass der standardmäßige Ablauf des Tokens 3600 Sekunden nach dem Zeitpunkt der Anforderung beträgt.
    Hinweis

    Führen Sie optional den folgenden cURL-Befehl aus, damit der Zugriffstokenwert über eine UNIX-Variable mit dem Namen AccessTokenValue in Ihrer Umgebung zugänglich ist:
       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`
    Sie können dann den Befehl echo $AccessTokenValue ausführen, um den Zugriffstokenwert abzurufen.
    Text in Klammern Value
    base64encoded clientid:secret Ersetzen Sie diese durch die codierten Zugangsdaten, die Sie im Abschnitt Base64 Client-ID und Client Secret codieren generiert haben. Stellen Sie sicher, dass keine Leerzeichen in den Zugangsdaten für clientid:clientsecret vorhanden sind.
    IDCS_Service_Instance Durch Ihre Identitätsdomain-URL ersetzen (Beispiel: https://<domainURL>/).)
    Hinweis

    Der Geltungsbereich urn:opc:idm:__myscopes__ im Befehl wird von Identitätsdomainclients als Tag verwendet, die Zugriffstoken vom Autorisierungsserver OAuth anfordern. Es werden Zugriffstoken zurückgegeben, die alle anwendbaren Identitätsdomains-Geltungsbereiche enthalten, die auf den Berechtigungen basieren, die von den Identitätsdomains-Administratorrollen dargestellt werden, die dem anfordernden Client erteilt wurden, und dem Benutzer, der durch die Anforderung des Clients angegeben wird (sofern vorhanden). Dieser Geltungsbereich wird keiner Identitätsdomainadministratorrolle direkt erteilt.
  3. Kopieren Sie den Wert access_token aus der Antwort. Stellen Sie sicher, dass nur das eigentliche Token kopiert wird. Dies ist der Wert access_token zwischen den Anführungszeichen:

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

    Die Antwort enthält den Parameter expires_in: 3600. Das bedeutet, dass Ihr Token nach einer Stunde ab der Generierung nicht mehr gültig ist. Nach einer Stunde müssen Sie das Token aktualisieren oder ein neues Zugriffstoken abrufen.

Schritt 4: REST-Anforderung an die Umgebung erstellen

Nachdem Sie das Zugriffstoken OAuth 2.0 abgerufen haben, können Sie das Token in einem cURL-Befehl verwenden, um eine REST-Anforderung an die REST-API der Identitätsdomains zu senden. Der folgende Befehl gibt eine Liste der Benutzer in einer Identitätsdomain zurück.

   curl -X GET
   -H "Content-Type:application/scim+json"
   -H "Authorization: Bearer <access_token>"
   https://<domainURL>admin/v1/Users
Element Wert
Methode -X ABRUFEN
Contenttypheader -H "Inhaltstyp:Anwendung/scim-json"
Autorisierungsheader -H "Autorisierung: Träger <access_token>"
HTTP-Protokoll HTTP oder HTTPS (HTTP wird empfohlen)
Identitätsdomain Die Identitätsdomain-URL (Beispiel: https://<domainURL>).)
REST-Endpunkt für Identitätsdomains /admin/v1/Users

JSON-Beispielausgabe aus der REST-API für Identitätsdomains

Im vorherigen Schritt hat die mit cURL gesendete REST-Anforderung eine Antwort im JSON-Format zurückgegeben. JSON ist ein offener Standard, der entsprechend Ihren Anforderungen formatiert oder geparst werden kann, z.B. wenn Sie bestimmte Attribute abrufen, die von Ihrer Anwendung benötigt werden.

{
  "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
}