Hinweis:

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:

Daher bietet das Tutorial die folgende Lösung:

Hinweis: Der OCI Functions-Code kann hier heruntergeladen werden: OAuthOCIService-fn.zip.

Ziele

Voraussetzungen

Aufgabe 1: OAuth2 mit Oracle Identity Cloud Service konfigurieren

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

      img.png

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

    1. Gehen Sie in der OCI-Konsole zu Identität und Sicherheit, und wählen Sie Föderation aus.

      img.png

    2. Klicken Sie auf OracleIdentityCloudSevice.

      img.png

    3. Klicken Sie auf den Link zur Oracle Identity Cloud Service-Konsole für Ihre Oracle Identity Cloud Service-Instanz.

      img.png

    4. Wir werden zwei Anwendungen erstellen. Klicken Sie auf Anwendungen und Services.

      img.png

    5. Klicken Sie unter "Anwendungen" auf Hinzufügen.

      img.png

    6. Wählen Sie Vertrauliche Anwendung aus, um die Konfiguration des Ressourcenservers zu starten.

      img.png

    7. Wir konfigurieren die erste Anwendung. Geben Sie einen Namen in der Ressourcenserveranwendung ein, und klicken Sie auf Weiter.

      img.png

    8. Klicken Sie auf Vorläufig überspringen. Wir müssen nur die Ressource konfigurieren.

      img.png

    9. Geben Sie den in Schritt 1 erhaltenen API-Gateway-Hostnamen ein.

      img.png

    10. Klicken Sie auf Geltungsbereich hinzufügen, und geben Sie die Geltungsbereichsinformationen ein.

      img.png

    11. Prüfen Sie die Umfangsinformationen, klicken Sie zweimal auf Weiter, und klicken Sie auf Fertigstellen.

      img.png

    12. Klicken Sie auf Aktivieren, um die Anwendung zu aktivieren.

      img.png

  3. Clientanwendung erstellen.

    1. Klicken Sie unter "Anwendungen" auf Hinzufügen.

      img.png

    2. Wählen Sie Vertrauliche Anwendung aus, um die Konfiguration des Ressourcenservers zu starten.

      img.png

    3. Geben Sie einen Namen für die Anwendung ein, und klicken Sie auf Weiter.

      img_1.png

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

      img.png

      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.

      img_10.png

    5. Scrollen Sie nach unten, und klicken Sie auf Geltungsbereich hinzufügen.

      img.png

    6. Suchen Sie die zuvor erstellte Ressourcenanwendung (oauth_resource_server), und klicken Sie auf Hinzufügen.

      img.png

    7. Ihr Geltungsbereich wird Ihrer Anwendung hinzugefügt. Klicken Sie anschließend auf Weiter.

      img.png

      Hinweis: Beachten Sie den Geltungsbereichswert. Sie müssen damit ein Token anfordern.

    8. Ü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.

      img.png

    9. Halten Sie die Client-ID und die Client Secret-Informationen fest. Sie benötigen dies, um Ihr Token zu erhalten.

      img.png

    10. Klicken Sie auf Aktivieren, um die Anwendung zu aktivieren, und der Autorisierer von OAuth2 ist zum Testen bereit.

      img_1.png

  4. Token abrufen: Jetzt können Sie den Autorisierer OAuth2 testen, um das Token abzurufen.

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

    2. Sie benötigen den URL-Link bis zum oraclecloud.com, dem Root-Endpunkt. Beispiel: https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com.

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

    4. Geben Sie die Zugangsdaten als Basisauthentifizierung, Client-ID und Client Secret ein.

      img.png

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

      img.png

    6. Klicken Sie auf Senden, führen Sie die Anforderung POST aus, und zeigen Sie das Token an.

      img_2.png

Aufgabe 2: OCI Functions zum Aufrufen der OCI-SDK-API konfigurieren

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

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

    img_12.png

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

      img_1.png

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

      img_2.png

    • Die Signaturverschlüsselung wird auf dem vollständigen Autorisierungs-HEADER verwendet.

      img_3.png

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

      img_13.png

    • 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 und oci_region).

      img_4.png

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

      img_15.png

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

      img_6.png

    • Dies ist der letzte Schritt, der mit einer gültigen Authentifizierung zurückgegeben wird.

      img_7.png

    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.

    img_14.png

    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 Zeichenfolge draft-cavage-http-signatures-08 zu generieren.

    img_16.png

    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.

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

    img.png

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

    img.png

  3. 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
    
  4. Um den HEADER für Oracle Identity Cloud Service-Parameter zu konfigurieren, müssen Sie auf Routenanforderungs-Policys anzeigen klicken.

    img.png

  5. Klicken Sie in den HEADER-Transformationen auf Bearbeiten, und geben Sie in beiden Parametern Verhalten in Overwrite ein, Headername als Authorization, 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.

    img.png

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.

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

    img_2.png

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

    img_9.png

    Und hier ist das Ergebnis.

    img_11.png

    In den Logs werden die Payloads für die Autorisierungslogik für benutzerdefinierten Code angezeigt.

    img_8.png

Danksagungen

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.