Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
OCI Streaming mit anderen Autorisierungsmethoden mit OCI API Gateway integrieren
Einführung
Oft benötigen wir unsere Anwendungen, um Oracle Cloud Infrastructure-(OCI-)REST-Services zu nutzen. Es gibt mehrere Möglichkeiten, die Sicherheit zwischen Komponenten zu gewährleisten, um sicherzustellen, dass sich die Anwendung sicher beim Backend-Service authentifizieren kann.
Meistens ist diese Aufgabe in Oracle Cloud nativ, da es verschiedene Möglichkeiten gibt, das Netzwerk und den Zugriff auf vorhandene Services zu sichern. Nur ein paar Einstellungen und Sie sind fertig. Es gibt jedoch Fälle, in denen die Anwendung zusätzliche Sicherheits- und Konnektivitätsanforderungen bieten kann. Der Anwendungsfall dieses Tutorials erfüllt einen sehr häufigen Bedarf im Hybrid- oder Multicloud-Szenario (On-Premises, das mit Oracle Cloud verbunden ist, oder Oracle Cloud, das mit einer anderen Cloud verbunden ist).
Lassen Sie uns das folgende Szenario vorstellen:
-
Anwendung in einem On-Premise-Netzwerk, das über Fast Connect/VPN mit Oracle Cloud verbunden ist.
-
Die Anwendung muss einen OCI Streaming-Service nutzen.
-
OCI-Service verfügt über keinen Authentifizierungsmechanismus, der die Möglichkeiten des Anwendungsverbrauchers erfüllt.
-
Die Anwendung muss sich mit OAuth2 authentifizieren, um sicher auf den Service zugreifen zu können.
Daher bietet das Tutorial die folgende Lösung:
-
Konfigurieren Sie den eigenen Identitätsprovider der Oracle Identity Cloud Service-Cloud für die Authentifizierung über OAuth2.
-
Konfigurieren Sie OCI API Gateway für die Integration mit Oracle Identity Cloud Service zur Authentifizierung über ein abgerufenes Token.
-
Codieren Sie eine Funktion, um die Authentifizierung für OCI Streaming zu erstellen (Methode
draft-cavage-http-signatures-08
). -
Erstellen Sie Gruppen und Policys, um den Zugriff auf Cloud-Ressourcen einzuschränken.
-
Stellen Sie einen Identitätsprovider bereit, mit dem Sie die Client-ID und die Secret-ID übergeben und ein Authentifizierungstoken abrufen können.
-
Stellen Sie einen funktionalen API-Gateway-REST-Service bereit, der sich über das erhaltene Token authentifiziert und es dem Verbraucher ermöglicht, die OCI Streaming-Services zu verwenden.
Hinweis: Der OCI Functions-Code kann hier heruntergeladen werden: OAuthOCIService-fn.zip.
Ziele
-
Lassen Sie zu, dass eine externe Anwendung OCI-REST-Services mit der Authentifizierung OAuth2 konsumiert.
-
Geben Sie einen OAuth2-Authentifizierungsservice auf OCI an.
-
Konfigurieren Sie OCI API Gateway und OCI Functions so, dass OCI-Services über ein Token ausgeführt werden.
Voraussetzungen
-
Eine OCI API Gateway-Instanz, die im Internet erstellt und verfügbar gemacht wurde. Weitere Informationen finden Sie unter Erstes API-Gateway in Oracle Cloud erstellen.
-
Netzwerkkonnektivität zwischen OCI-API-Gateway, OCI Functions und OCI-Ressource PaaS.
-
VCN/Subnetze
-
Sicherheitsliste
-
NAT-Gateway/Internetgateway
-
Öffentliche/private Netzwerke
-
-
Kenntnisse der OCI Functions- und OCI-REST-API zum Codieren eines Aufrufs für den OCI-Service.
Aufgabe 1: OAuth2 mit Oracle Identity Cloud Service konfigurieren
-
OCI API Gateway-Parameter abrufen: Beginnen wir mit der Konfiguration des Mechanismus OAuth2. Wir müssen Ihre OCI API Gateway-Instanz in einen Identitätsprovider integrieren, indem wir Oracle Identity Cloud Service aus Oracle Cloud als Identitätsprovider konfigurieren.
-
Gehen Sie zur OCI-API-Gatewayinstanz, und kopieren Sie Hostname. Diese Informationen werden in der Konfiguration des Oracle Identity Cloud Service-Ressourcenservers im nächsten Schritt verwendet.
-
-
Ressourcenanwendung erstellen: Wir müssen einen OAuth2-Autorisierer für Ihre Anwendung erstellen. Dies ist mit Oracle Identity Cloud Service in Oracle Cloud möglich.
-
Gehen Sie in der OCI-Konsole zu Identität und Sicherheit, und wählen Sie Föderation aus.
-
Klicken Sie auf OracleIdentityCloudSevice.
-
Klicken Sie auf den Link zur Oracle Identity Cloud Service-Konsole für Ihre Oracle Identity Cloud Service-Instanz.
-
Wir werden zwei Anwendungen erstellen. Klicken Sie auf Anwendungen und Services.
-
Klicken Sie unter "Anwendungen" auf Hinzufügen.
-
Wählen Sie Vertrauliche Anwendung aus, um die Konfiguration des Ressourcenservers zu starten.
-
Wir konfigurieren die erste Anwendung. Geben Sie einen Namen in der Ressourcenserveranwendung ein, und klicken Sie auf Weiter.
-
Klicken Sie auf Vorläufig überspringen. Wir müssen nur die Ressource konfigurieren.
-
Geben Sie den in Schritt 1 erhaltenen API-Gateway-Hostnamen ein.
-
Klicken Sie auf Geltungsbereich hinzufügen, und geben Sie die Geltungsbereichsinformationen ein.
-
Prüfen Sie die Umfangsinformationen, klicken Sie zweimal auf Weiter, und klicken Sie auf Fertigstellen.
-
Klicken Sie auf Aktivieren, um die Anwendung zu aktivieren.
-
-
Clientanwendung erstellen.
-
Klicken Sie unter "Anwendungen" auf Hinzufügen.
-
Wählen Sie Vertrauliche Anwendung aus, um die Konfiguration des Ressourcenservers zu starten.
-
Geben Sie einen Namen für die Anwendung ein, und klicken Sie auf Weiter.
-
Wählen Sie Anwendung jetzt als Client konfigurieren aus, um die Konfigurationen für Ihre Clientanwendung zu aktivieren. Wählen Sie Clientzugangsdaten, JWT-Assertion und Im Namen aus.
Hinweis: Wenn Sie OAuth2 in Ihrem Funktionscode validieren möchten, MÜSSEN Sie das Flag Introspect festlegen. Dadurch wird der REST-API-Service für Oracle Identity Cloud Service
/oauth2/v1/introspect
aktiviert. -
Scrollen Sie nach unten, und klicken Sie auf Geltungsbereich hinzufügen.
-
Suchen Sie die zuvor erstellte Ressourcenanwendung (
oauth_resource_server
), und klicken Sie auf Hinzufügen. -
Ihr Geltungsbereich wird Ihrer Anwendung hinzugefügt. Klicken Sie anschließend auf Weiter.
Hinweis: Beachten Sie den Geltungsbereichswert. Sie müssen damit ein Token anfordern.
-
Überspringen Sie die Fenster Ressourcen und Web Tier Policy. Wählen Sie unter Autorisierung die Option Berechtigungen als Autorisierung durchsetzen aus, und klicken Sie auf Fertigstellen.
-
Halten Sie die Client-ID und die Client Secret-Informationen fest. Sie benötigen dies, um Ihr Token zu erhalten.
-
Klicken Sie auf Aktivieren, um die Anwendung zu aktivieren, und der Autorisierer von OAuth2 ist zum Testen bereit.
-
-
Token abrufen: Jetzt können Sie den Autorisierer OAuth2 testen, um das Token abzurufen.
-
Verfassen Sie die URL für den Autorisierer. Sie können dies abrufen, indem Sie die Oracle Identity Cloud Service-URL im Browser abrufen. In der Oracle Identity Cloud Service-URL wird Folgendes angezeigt:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
. -
Sie benötigen den URL-Link bis zum
oraclecloud.com
, dem Root-Endpunkt. Beispiel:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
Sie müssen den oAuth-Authentifizierungspfad hinzufügen. Diese URL wird als REST-Anforderung
POST
ausgeführt. Beispiel:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
. Sie müssen einige Parameter eingeben, um das Token anzufordern. -
Geben Sie die Zugangsdaten als Basisauthentifizierung, Client-ID und Client Secret ein.
-
Geben Sie im Inhalt Hauptteil die Werte grant_type und Geltungsbereich ein. Beachten Sie, dass der Geltungsbereich in der Oracle Identity Cloud Service-Konfiguration erfasst wurde.
-
Klicken Sie auf Senden, führen Sie die Anforderung
POST
aus, und zeigen Sie das Token an.
-
Aufgabe 2: OCI Functions zum Aufrufen der OCI-SDK-API konfigurieren
-
OCI Functions und OCI API Gateway verstehen: Es ist eine Best Practice, Ihre Services über ein OCI-API-Gateway bereitzustellen. Die Authentifizierung kann durchgeführt werden, indem die Zugangsdaten von OCI API Gateway an die Backend-Services übergeben werden. Wenn die Backend-Authentifizierung jedoch nicht die geeignete Methode für Ihre Clientanwendung war, können wir einige Konfigurationen auf OCI API Gateway-Ebene vornehmen.
In diesem Schritt erfahren Sie, wie wir mit OCI API Gateway die OAuth2-Authentifizierung und die Anforderung für jeden OCI-Service wie OCI Streaming über die OCI Functions integrieren können.
OCI Functions kann den Job ausführen, um die richtige Authentifizierung/Autorisierung zu erstellen und an den OCI-Service zu übergeben, ohne dass Benutzerzugangsdaten oder Private Keys an die Consumer-Anwendungen übergeben werden müssen. Einige Services im OCI-Service können sich nicht mit der Methode OAuth2 authentifizieren. Daher können wir dies mit OCI Functions tun. Informationen zum Erstellen und Bereitstellen von OCI Functions finden Sie unter Schnellstart von OCI Functions.
In diesem Beispiel kann sich der OCI Streaming-Service mit dem OCI-Private Key in OCI IAM über die Methode draft-cavage-http-signatures-08 authentifizieren, und Consumer können sich mit OAuth2 authentifizieren.
-
Code verstehen: Dieser Code wird mit OCI API Gateway verwendet. In Ihrem API-Deployment konfigurieren wir den OCI Streaming-Endpunkt im OCI-API-Gateway und werden als HEADER-Autorisierungsparameter übergeben. Sie können diese Funktion also für viele Services in jedem erforderlichen OCI-API-Gateway-Deployment verwenden.
-
Diese Funktion in Python erstellt ein Datum und eine Uhrzeit im Format für die Authentifizierung. Dieses Datum und diese Uhrzeit müssen einmal generiert und in zwei Punkten verwendet werden. Zum Datum des Headers in der OCI Streaming-Anforderung und der kryptografierten Signatur HEADER.
-
Dies ist die Funktion für die Signaturverschlüsselung. Die Assemblierung besteht aus der Verwendung des Private Keys des OCI-IAM-Benutzers mit SHA-256 und dann in base64.
-
Die Signaturverschlüsselung wird auf dem vollständigen Autorisierungs-HEADER verwendet.
-
Dies ist der Tokenvalidierungscode von Oracle Identity Cloud Service OAUTH2. Sie müssen die Datei
config.json
mit Ihren Oracle Identity Cloud Service-Anwendungsparametern konfigurieren. -
Dies ist der Anfang der Funktion und initialisiert einige Informationen aus OCI IAM-Sicherheit und OCI Streaming-Variablen, die für dieses API-Deployment erstellt wurden (
streaming_host
undoci_region
). -
Dies ist der Hauptteil dieser Funktion, es gibt zwei Teile.
Im ersten Teil wird das in der API-Gateway-Anforderung übergebene Token abgerufen. Danach rufen wir die Funktion auth_idcs() auf, um das Token in Oracle Identity Cloud Service zu validieren. Bevor die Zeichenfolge draft-cavage-http-signatures-08 generiert wird, validieren wir das Oracle Identity Cloud Service-Token. Wenn es sich nicht um ein gültiges Token handelt, wird bei der Antwort ein Fehler 401 nicht autorisiert ausgegeben.
Im zweiten Teil werden wir zwei Werte schaffen. Das Datum (d) mit dem Datumsformat wird bei der Erstellung der Signatur (a) verwendet. Die rdata erstellt die Antwort für die Funktion mit den Werten für Autorisierung und Datum, die von OCI API Gateway zur Authentifizierung in OCI Streaming verwendet werden.
-
Hier können wir ein Log in der OCI-Beobachtbarkeit generieren. Dieser Schritt ist optional. Geben Sie die Oracle Cloud-ID (OCID) für das Log ein. Sie müssen zuvor ein benutzerdefiniertes Log erstellen.
Hinweis: Informationen zum Erstellen eines benutzerdefinierten Logs in OCI Observability finden Sie unter OCI API Gateway, Functions und Beobachtbarkeit zum Validieren von JSON-Inhalten und Überwachen von API-Headern und -Body verwenden.
-
Dies ist der letzte Schritt, der mit einer gültigen Authentifizierung zurückgegeben wird.
Dies sind die
requirements.txt
-Bibliotheken, die in diese Funktion (fn) geladen werden müssen.requirements.txt --------------------- fdk>=0.1.54 requests oci cryptography six PyJWT py3_lru_cache simplejson
Dies ist die Datei
config.json
.Und das ist die OCI-Konfigurationsdatei. Sie können diese Datei aus der OCI-CLI-Installation kopieren. Es ist jedoch wichtig, den Abschnitt
key_file
zu ändern und den Pfad der OCI-CLI-Installation zu entfernen. Dies wird im Python-Code verwendet, um die kryptografische Zeichenfolgedraft-cavage-http-signatures-08
zu generieren.Erstellen Sie vor dem Deployment der Funktion zwei Variablen, und füllen Sie diese mit den Werten für OCI Streaming-OCID und OCI-Region aus.
fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a fn config app <function-app> oci_region us-ashburn-1
Stellen Sie Ihre Funktion bereit, und konfigurieren Sie sie im OCI-API-Gateway.
-
Aufgabe 3: API-Gateway-Deployment konfigurieren
Hinweis: Entwickeln Sie eine Funktion, und rufen Sie sie in OCI API Gateway auf. Informationen hierzu finden Sie unter OCI Functions: API-Schlüssel mit API Gateway validieren.
-
Konfigurieren Sie den OCI API Gateway-Service. In diesem Beispiel konfigurieren wir einen OCI Streaming-Service. Geben Sie in den Basisinformationen das Pfadpräfix als
/20180418/streams/
plus die OCID der Streaminginstanz ein.Beispiel:
/20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
Wählen Sie in der Authentifizierung die Optionen Einzelne Authentifizierung und Autorisiererfunktion aus. Wählen Sie das Compartment und die Oracle-Funktion als
get-authorization
aus. -
Konfigurieren Sie die Anforderungs-HEADER-Parameter.
Header Parameter 1 Context table=request.headers Header name=Date Argument name=Date Header Parameter 2 Context table=request.headers Header name=token Argument name=token
-
Um den HEADER für Oracle Identity Cloud Service-Parameter zu konfigurieren, müssen Sie auf Routenanforderungs-Policys anzeigen klicken.
-
Klicken Sie in den HEADER-Transformationen auf Bearbeiten, und geben Sie in beiden Parametern Verhalten in
Overwrite
ein, Headername alsAuthorization
,Date
und Werte als${request.auth[authorization]}
bzw.${request.auth[date]}
.${request.auth[authorization]}
und${request.auth[date]}
sind die vom Funktions-Python-Code zurückgegebenen Werte und werden als HEADERs für den Backend-Service übergeben.
Aufgabe 4: OCI-Gruppe und -Policys konfigurieren
Informationen zum Konfigurieren der Policys für OCI Streaming finden Sie unter OCI Streaming-Policys. Informationen zum Verwenden allgemeiner Policys finden Sie unter Allgemeine Policys.
Aufgabe 5: API testen
Simulieren wir Ihre Anwendungs-OAuth2-Anforderung für Ihren Modell-Deployment-Service in OCI Streaming.
-
Rufen Sie das Token ab, und übergeben Sie die Client-ID und das Client Secret an den Oracle Identity Cloud Service-Provider.
Verb: POST URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token BODY (x-www-form-urlencoded): scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope grant_type: client_credentials HEADER Authorization: clientID:clientSecret\* - convert your clientID:clientSecret to a base64 value
-
Testen Sie die Anforderung an OCI API Gateway. Geben Sie den API-Gateway-Deployment-Endpunkt ein, und wählen Sie POST für Ihre REST-Anforderung aus. Sie müssen sechs HEADER im KÖRPER Ihrer Anfrage angeben.
Content-Type: application/json access-control-allow-origin: * access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS access-control-allow-credentials: true Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT token: put your <access_token> here* * Remember that your token have 1 hour duration.
Und hier ist das Ergebnis.
In den Logs werden die Payloads für die Autorisierungslogik für benutzerdefinierten Code angezeigt.
Verwandte Links
Danksagungen
- Autor – Cristiano Hoshikawa (Oracle LAD A-Team Solution Engineer)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91388-02
November 2024