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.
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.
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:
- Öffnen Sie das Navigationsmenü, und klicken Sie auf Identität und Sicherheit. Klicken Sie unter Identität auf Domains.
- 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.
- Klicken Sie auf Anwendung hinzufügen.
- Wählen Sie im Dialogfeld Anwendung hinzufügen die Option Verträge Anwendung aus, und klicken Sie auf Workflow starten.
- Geben Sie auf der Seite Anwendungsdetails hinzufügen einen Anwendungsnamen und eine Beschreibung ein, und klicken Sie auf Weiter.
- Wählen Sie auf der Seite OAuth konfigurieren unter Clientkonfiguration die Option Diese Anwendung jetzt als Client konfigurieren aus.
- Wählen Sie unter Autorisierung unter Zulässige Berechtigungstypen nur Clientzugangsdaten aus.
- Wählen Sie unten auf der Seite die Option Anwendungsrollen hinzufügen aus, und klicken Sie auf Rollen hinzufügen.
- Wählen Sie im Bereich Anwendungsrollen hinzufügen die Option Identitätsdomainadministrator aus, und klicken Sie auf Hinzufügen.
- Klicken Sie auf Weiter und dann auf Fertigstellen.
- 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.
- Klicken Sie nach dem Erstellen der Anwendung auf Aktivieren.
Schritt 2: Base64 Client-ID und Client Secret codieren
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.
Windows
-
Starten Sie Notepad, und fügen Sie dann die Client-ID und das Client Secret in Notepad ein.
-
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. -
Speichern Sie die Datei in
C:\temp
, und benennen Sie die DateiappCreds.txt.
. -
Klicken Sie in Windows Explorer mit der rechten Maustaste auf
C:\temp
, und wählen Sie im Kontextmenü die Option CMD-Prompt hier aus. -
Geben Sie den folgenden Befehl ein, um die Client-ID und das Client Secret zu codieren:
certutil -encode appCreds.txt appbase64Creds.txt
-
Ö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 DateienappCreds.txt
undappbase64Creds.txt
, nachdem Sie den Vorgang abgeschlossen haben.
Mac und Linux
-
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.
Platzieren Sie die Client-ID und das Client Secret in derselben Zeile, und fügen Sie einen Doppelpunkt zwischen diesen ein:
clientid:clientsecret.
HinweisAnweisung.
Stellen Sie sicher, dass keine Leerzeichen in der clientid:clientsecret vorhanden sind.-
Kopieren Sie die Zeile
clientid:clientsecret
. -
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. -
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.
-
Starten Sie eine Eingabeaufforderung.
-
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 NamenAccessTokenValue
in Ihrer Umgebung zugänglich ist:
Sie können dann den Befehlexport 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 $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 Geltungsbereichurn: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. -
Kopieren Sie den Wert
access_token
aus der Antwort. Stellen Sie sicher, dass nur das eigentliche Token kopiert wird. Dies ist der Wertaccess_token
zwischen den Anführungszeichen:Status: 200 "access_token":"eyJ4NXQiOiI4Wk. . ." "token":"Bearer", "expires_in":3600
Hinweis
Die Antwort enthält den Parameterexpires_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
}