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 vorzunehmen, benötigen Sie ein OAuth2-Zugriffstoken für die 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 erforderlichen Schritte beschrieben, um einen OAuth-Client mit einer Identitätsdomain für den Zugriff auf die REST-APIs zu verwenden:

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

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

Verwenden Sie bestimmte OAuth 2.0-Parameter beim Arbeiten mit einer Identitätsdomain. In der folgenden Tabelle werden die gängigsten Parameter beschrieben.

Parameter Wert Kommentare

Autorisierungsheader

Basis <base64_clientid_secret>

Wird vom Client als Basisauthentifizierungsschema zur Übertragung des Zugriffstokens in einem Header verwendet. Der Zugriffstokenwert muss ein base64-UTF-8-codierter Wert der Client-ID und des Client Secret sein, der mit einem Doppelpunkt als Trennzeichen verkettet ist. Beispiel: clientID:clientSecret.

Client-ID

<client_id>

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

Client-Secret

<client_secret>

Erforderlich. Ein Private Key, der einem Kennwort ähnelt, das generiert wird, wenn Sie Ihre Anwendung in der Identitätsdomainkonsole registrieren. Teilen Sie diesen Wert nicht.

Zugriffstoken-URL

/oauth2/v1/token

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

Auth.-URL

/oauth2/v1/authorize

Ein Endpunkt, mit dem ein Autorisierungscode aus Identitätsdomains abgerufen und dann während eines 3-beinigen OAuth-Ablaufs verwendet wird.

Berechtigungstyp

client_credentials

Erforderlich. Dies bedeutet, dass die aufgerufene REST-API Eigentum der Clientanwendung ist.

Umfang (erforderlich)

urn: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 in Identitätsdomains mit der Konsole 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 für die 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, was das Zugriffstoken tun 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 zum Anfordern von Benutzersuchen, -bearbeitungen, -erstellungen und -löschungen hinzugefügt. 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 die folgenden Schritte aus:

  1. Öffnen sie das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Domains aus.
  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 dann auf Integrierte Anwendungen.
  3. Wählen Sie Anwendung hinzufügen aus.
  4. Wählen Sie im Dialogfeld Anwendung hinzufügen die Option Vertrauliche Anwendung und dann Workflow starten aus.
  5. Geben Sie auf der Seite Anwendungsdetails hinzufügen einen Anwendungsnamen und eine Beschreibung ein, und wählen Sie Weiter aus.
  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 nur Clientzugangsdaten als Zulässiger Berechtigungstyp aus.
  8. Wählen Sie unten auf der Seite Anwendungsrollen hinzufügen und dann Rollen hinzufügen aus.
  9. Wählen Sie im Bereich Anwendungsrollen hinzufügen die Option Identitätsdomainadministrator und dann Hinzufügen aus.
  10. Wählen Sie Weiter, Fertigstellen aus.
  11. Scrollen Sie auf der Detailseite der Anwendung nach unten zu Allgemeine Informationen. Kopieren Sie die Client-ID und das Client Secret, und speichern Sie sie an einem sicheren Ort.
  12. Nachdem die Anwendung erstellt wurde, wählen Sie Aktivieren aus.

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 codieren einzelne URLs die Client-ID und das Client Secret. Wenn Ihre Client-ID und Ihr Client Secret keine Sonderzeichen enthalten, müssen Sie sie nicht zuerst per URL codieren. Als Best Practice empfehlen wir es jedoch sehr.
In den folgenden Abschnitten wird gezeigt, wie Sie base64 die Client-ID und das Client Secret im UTF-8-Format mit einem Windows- und einem Mac/Linux-Umfeld codieren.

Fenster

  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 ihnen 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 nennen Sie die Datei appCreds.txt..

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

  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 Notizutility (z.B. Mac Notes, Gedit Linux oder Vi), und fügen Sie dann die Client-ID und das Client Secret in das Notizutility ein.

  2. Platzieren Sie die Client-ID und das Client Secret in derselben Zeile, und fügen Sie einen Doppelpunkt zwischen ihnen 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 unter 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 unterteilt 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 ist, 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-Betriebssystem 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 ab dem Zeitpunkt der Anforderung beträgt.
    Hinweis

    Führen Sie optional den folgenden cURL-Befehl aus, damit der Zugriffstokenwert über eine UNIX-Variable namens 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 Wert
    base64encoded clientid:secret Ersetzen Sie sie durch die codierten Zugangsdaten, die Sie im Abschnitt Base64 Client-ID und Client Secret codieren generiert haben. Stellen Sie sicher, dass die clientid:clientsecret-Zugangsdaten keine Leerzeichen enthalten.
    IDCS_Service_Instance Durch Identitätsdomain-URL ersetzen (Beispiel: https://<domainURL>/).)
    Hinweis

    Der Geltungsbereich urn:opc:idm:__myscopes__ im Befehl wird von Identitätsdomainclients, die Zugriffstoken vom Autorisierungsserver OAuth anfordern, als Tag verwendet. Zugriffstoken werden zurückgegeben, die alle anwendbaren Identitätsdomaingeltungsbereiche basierend auf den Berechtigungen enthalten, die von den Identitätsdomainadministratorrollen 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 tatsächliche 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. Dies bedeutet, dass Ihr Token nach einer Stunde ab dem Zeitpunkt, an dem Sie es generieren, nicht mehr gültig ist. Nach einer Stunde müssen Sie das Token aktualisieren oder ein neues Zugriffstoken abrufen. Um das Token zu aktualisieren, geben Sie den folgenden cURL-Befehl ein. Ersetzen Sie den Text in Klammern ( < > ) durch die entsprechenden Werte:
    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>"

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
Inhaltstypheader -H "Content-Type:application/scim-json"
Autorisierungsheader -H "Autorisierung: Bearer <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

Beispiel für eine JSON-Ausgabe 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 nach Ihren Anforderungen formatiert oder geparst werden kann, z. B. um bestimmte Attribute zu erhalten, 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
}