API-Gateway-Deployments erstellen

Mit Ihren Funktionen können Sie das systemeigene Authentifizierungsverfahren für die JWT-Validierung mit Oracle Identity Cloud Service integrieren und testen.

API-Gateway-Deployment mit nativer JWT-Validierung erstellen

Mit der nativen JWT-Validierungsfunktion für Oracle Cloud Infrastructure-Gateway können Sie eine auf Java Web Token (JWT)basierende Authentifizierungs-Policy für Ihr Deployment hinzufügen.

Mit diesem JWT-Typ können Sie die erforderlichen Daten angeben, um die Validierung des eingehenden Zugriffstokens (über Header oder Parameter) auszuführen. Die Policy benötigt die folgenden Informationen:

  • Zulässige ausgebende Benutzer: Tokenaussteller. Es sind mehrere OAuth-Server verfügbar. In diesem Fall verwenden Sie jedoch https://identity.oraclecloud.com/.
  • Zielgruppen: Die Ressourcen, auf die für dieses Token zugegriffen werden kann.
  • Public Keys: Das Json Web Key Set (JWKS), mit dem das Token innerhalb der ausgebenden Benutzer und Zielgruppen validiert werden soll. Zwei Arten von JWKS sind zulässig:
    • Statische Schlüssel: Bei dieser Option müssen Sie die JWKS manuell mit dem JSON-Format angeben, das die erforderlichen Eigenschaften gemäß RFC 7517 Section 4 aufweisen muss.
    • Remote-Schlüssel: Bei dieser Option müssen Sie eine URL angeben, aus der JWKS mit REST konsumiert werden können. Eine Einschränkung dieser Funktion besteht darin, dass die angegebene URL nicht geschützt werden muss, da diese Funktion derzeit die Möglichkeit zum Lesen geschützter URLs zum Abrufen der JWKS nicht unterstützt.
  • Erweiterte Optionen:
    • Max. Clow-Dauer in Sekunden: Wenn API-Gateway und der Identitätsprovider etwas unterschiedlich aufweisen, können Sie mit diesem Wert die Zeit für das Tokengültigkeitsfenster anpassen, um den Zeitpunkt zwischen den beiden Services auszurichten.
    • Ansprüche: Damit prüfen Sie die Ansprüche, falls das eingehende Token erforderlich ist. Beispiel: client_id claim oder user_id claim.

Erstellen Sie einen neuen Deployment-Namen in Ihrem API-Gateway mit einer Route, um die in den vorherigen Schritten erstellte Funktion mit der Endpunkt- und JWT-Validierung zu erreichen. In diesem Beispiel hat das Deployment den Namen my_jwt_test.

  1. Wählen Sie in der Oracle Cloud Infrastructure-Konsole auf der Seite "API-Gateway" das aktive Gateway, indem Sie auf seinen Namen klicken.
  2. Wählen Sie unter Ressourcen die Option Deployments aus, und wählen Sie anschließend Deployment erstellen aus.
  3. Konfigurieren Sie die Authentifizierungs-Policy mit den folgenden Werten:
    • Authentifizierungstyp: JWT
    • Authentifizierungstoken: Header
    • Headername: Autorisierung
    • Authentifizierungsschema: Bearer
    • Anonymen Zugriff aktivieren: aktiviert
  4. Fügen Sie die Oracle Identity Cloud Service-Domain als zulässiger Aussteller hinzu, damit Sie sie als Tokengenerator verwenden können. Setzen Sie in den Ausstellern die Option Zulässige ausgebende Benutzer auf https://identity.oraclecloud.com/
  5. Fügen Sie eine Zielgruppe hinzu. Legen Sie eine zulässige Zielgruppe für die URL Ihrer Oracle Identity Cloud Service Oracle Functions-Anwendung fest. Beispiel: https://myinstance.apigateway.mydc.oci.customer-oci.com.
    Die zu validierenden Zielgruppen müssen die für die Ressourcen sein, auf die das generierte Token zugreifen muss. In diesem Fall wird das Token aus der Oracle Identity Cloud Service-App erwartet, die der Client des Eigentümers der Oracle Functions Oracle Identity Cloud Service-Anwendungsressource ist, der die primären Zielgruppen der Oracle Functions Oracle Identity Cloud Service-App als Ressourcengeltungsbereich hat.
  6. Fügen Sie das JWK hinzu, das zur Validierung des eingehenden JWT-Tokens verwendet werden soll; entweder Remote- oder statische JWKS. So fügen Sie Remote-JWKS hinzu:
    1. Rufen Sie die Oracle Identity Cloud Service-Konsole auf.
    2. Wählen Sie Einstellungen, Standardeinstellungen aus.
    3. Wenn es noch nicht aktiviert ist, wählen Sie Zugriffssignaturzertifikat aus, klicken auf Speichern und anschließend auf Ja.
    4. Rufen Sie die JWK-URL für die Oracle Identity Cloud Service-Instanz auf. Beispiel: https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk.
    5. Nachdem Sie validiert haben, dass die JWK-URL angezeigt werden kann, gehen Sie zurück zu API Gateway und konfigurieren die Public Keys. Setzen Sie den Typ auf Remote-JWKS, und setzen Sie den URI auf die URL, die Sie gerade validiert haben.
  7. So fügen Sie statische JWKS hinzu:
    1. Definieren Sie das Formular Statischer Schlüssel. Hierzu müssen Sie den JWK für Oracle Identity Cloud Service anfordern. Dies können Sie mit Kul tun. Beispiel:
      ## Get access token to be able to invoke protected /admin/v1/SigningCert/jwk endpoint.
      # Clientid and ClientSecret should be from an existing IDCS Application in the stripe.
      #
      $ curl -X POST -u "<clientId>:<clientSecret>" https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
       
       
      export jwtToken="<RETRIEVED_TOKEN>"
       
      ## Get JWK
      $ curl -X GET  https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk -H "Authorization: Bearer ${jwtToken}"
       
      {
          "keys":[{
              "kty":"RSA",
              "x5t#S256":"<value>",
              "e":"<value>",
              "x5t":"<value>",
              "kid":"SIGNING_KEY",
              "x5c":["<value>"],
              "key_ops":["encrypt","verify","wrapKey"],
              "alg":"RS256",
              "n":"<value>"
          }]
      }
    2. Konfigurieren Sie die Public Keys in API Gateway. Legen Sie den Typ auf Statische Schlüssel fest. Setzen Sie die Schlüssel-ID auf SIGNING_KEY und das Format auf JSON Web Key. Einfügen in einen JSON-Webschlüssel, wobei nur die folgende Teilmenge der Werte verwendet wird, die Sie aus Oracle Identity Cloud Service erhalten haben.
      Nur bestimmte Eigenschaften des JWK-Schlüssels werden derzeit von API-Gateway unterstützt. Verwenden Sie anstelle der Eigenschaft key_ops die Eigenschaft use.
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. Optional können Sie im Abschnitt "Ansprüche prüfen" eine zusätzliche Validierung hinzufügen. Fügen Sie einen client_id-Anspruch hinzu, um nur Werte zuzulassen, die der Oracle Identity Cloud Service-Anwendung entsprechen, die mit Ihrer Oracle Visual Builder-Anwendung verknüpft ist. Wenn Sie mehrere Oracle Visual Builder-Anwendungen haben und die OAuth-Token mit verschiedenen Oracle Visual Builder Oracle Identity Cloud Service-Anwendungen generiert werden, müssen Sie diesem Überprüfungsschritt alle Oracle Identity Cloud Service-Client-IDs hinzufügen. Legen Sie den Anspruchsschlüssel auf client_id fest, geben Sie einen oder mehrere Anspruchswerte ein, und aktivieren Sie das Kontrollkästchen Erforderlich.
  9. Optional können Sie CORS so konfigurieren, dass Anforderungen aus den angegebenen Domains zulässig sind. Beispiel: Möglicherweise müssen Sie die Hostnamen des Oracle Visual Builder-Servers als zulässige Hostnamen von Anforderungen zulassen. Zulässige Origins auf die URLs Ihrer Server setzen, angegebene Header für Autorisierung, Zulässige Header für Autorisierung, Zugangsdaten zulassen für Ja und Zulässige Methoden für GET, POST aktivieren.
  10. Erstellen Sie eine Route, die auf Ihre Funktion verweist, z. B. die Beispielfunktion saasopportunitiesfn. Setzen Sie Pfad auf /assertion/facall, Methoden auf GET und POST, Typ auf Oracle Functions, stellen Sie sicher, dass für die Anwendung in <Ihr Compartment> das korrekte Compartment ausgewählt ist, legen Sie die Anwendung auf Ihren Anwendungsnamen fest, wie z. B. myapplication, und legen Sie Funktionsname auf Ihren Funktionsnamen fest, wie saasopportunitiesfn.
Nachdem Sie die Änderungen gespeichert haben, können Sie den Inhalt der Payload my_jwt_test des API-Gateway-Deployments prüfen.

REST-Aufruf für Endpunkt testen

Um den neuen Endpunkt-REST-Aufruf zu testen, können Sie das Feature "Neues Zugriffstoken abrufen" von Postman verwenden.

Wenn Sie das generierte Token in den folgenden Schritten verwenden, können Sie Oracle Fusion Applications Cloud Service-Endpunkte nicht direkt erreichen, da das Token mit der Oracle Identity Cloud Service-App aus Oracle Visual Builder generiert wurde. Es ist jedoch nur möglich, Oracle Functions mit der aktuellen Konfiguration für die Bereiche zu erreichen, die Sie vorher eingerichtet haben. Wenn Sie zum Generieren des Tokens eine andere Oracle Identity Cloud Service-Anwendung verwenden und diese Anwendung nicht die Berechtigung zum Erreichen des Oracle Functions-Ressourcengeltungsbereichs besitzt, lässt API-Gateway die Anforderung nicht zu (sie gibt einen 401 Fehler zurück), da Sie die Zielgruppe der Oracle Functions Oracle Identity Cloud Service-Ressource hinzugefügt haben. Wenn Sie Claims Client-ID-Prüfungen hinzugefügt haben, stellt API-Gateway sicher, dass die Token nur mit den angegebenen Oracle Identity Cloud Service Apps client_ids übereinstimmen.

Verwenden Sie die folgenden Parameter zum Testen:

  • Berechtigungstyp: Kennwortzugangsdaten - Dieser Berechtigungstyp stellt sicher, dass der angegebene Benutzername dem Subject im generierten Token entspricht.
  • Zugriffstoken-URL: Ihre OAuth-URL der Oracle Identity Cloud Service-Instanz. Beispiel: https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token.
  • Benutzername: Ein Benutzer, der sowohl in Oracle Identity Cloud Service als auch in Oracle Fusion Applications Cloud Service mit den entsprechenden Berechtigungen in beiden Benutzern vorhanden ist.
  • Kennwort: Geben Sie das Kennwort für diesen Benutzer ein.
  • ClientId: Die ID der Oracle Identity Cloud Service Client Oracle Functions-Ressource, die mit Oracle Visual Builder verknüpft ist.
  • ClientSecret: Das Client Secret der Oracle Identity Cloud Service App Client Oracle Functions-Ressource, die mit Oracle Visual Builder verknüpft ist
  • Geltungsbereich: Dieser Geltungsbereich muss mit den angegebenen Ressourcen der Oracle Functions Oracle Identity Cloud Service-Anwendung übereinstimmen. Beispiel: https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. Rufen Sie die konfigurierte Route auf, die auf Ihre Asserter-Funktion mit Postman und den oben aufgeführten Parametern verweist.
  2. Alternativ dazu können Sie Kul verwenden. Beispiel:
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
Sie sollten ein Ergebnis aus einem der folgenden Tools erhalten, ähnlich wie folgt:
{
  "principal": "mary.jane",
  "gotPrincipalFrom": "BEARER",
  "statusCode": "200",
  "response": {
    "items": [],
    "count": 0,
    "hasMore": false,
    "limit": 25,
    "offset": 0,
    "links": [
      {
        "rel": "self",
        "href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
        "name": "expenses",
        "kind": "collection"
      }
    ]
  }
}

Optional API-Gateway-Deployment mit benutzerdefinierter Authentifizierung erstellen

Verwenden Sie diese Lösung, wenn Sie eine benutzerdefinierte Authentifizierungsfunktion verwenden möchten, um das Bearer-Token für eingehende Aufrufe an API-Gateway-Endpunkte zu validieren.

Dies ist die optionale Funktion, die Sie definiert haben, wenn Sie über den Abschnitt "Authentifizierungsfunktion in Oracle Cloud Infrastructure definieren" über die Schritte verfügen.

  1. Um das API-Gateway bereitzustellen, wählen Sie auf der Seite "API-Gateway" das aktive Gateway, indem Sie auf seinen Namen klicken.
  2. Klicken Sie unter Ressourcen auf Deployments, Deployment erstellen.
  3. Im Scratch-Modus Von können Sie auf den Assistenten klicken, um das API-Gateway bereitzustellen.
    Alternativ können Sie wie unten beschrieben eine Deployment-Definitionsdatei hochladen.

Das folgende Code-Snippet ist ein Beispiel für eine JSON-Datei der Oracle Cloud Infrastructure API-Deployment-Spezifikation, mit der Sie bereitstellen können, anstatt den Assistenten zu verwenden. Innerhalb dieser Datei wird Folgendes angezeigt:

  • Zeilen 1bis8: Eine Authentifizierungsanforderungs-Policy. Diese Definition gibt an, dass für eine Anforderung in diesem Deployment zuerst diese Funktion (functionId) aufgerufen wird, tokenHeader übergeben wird und wenn "true" zurückgegeben wird, dann können Sie andernfalls mit einer nicht autorisierten HTTP-Nachricht antworten.
  • Positionen 9-17: Eine CORS-Definition zur Verwaltung und Kontrolle des Cross-Origin Resource Sharing.
  • Zeilen 18-43: Zwei URL-Einstiegspunkte/VERBs zu einzelnen Funktionen in FaaS.
{
    "requestPolicies": {
      "authentication": {
        "type": "CUSTOM_AUTHENTICATION",
        "isAnonymousAccessAllowed": true,
        "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
        "tokenHeader": "Authorization"
      }
      "cors":{ 
         "allowedOrigins": [<list-of-origins>], 
         "allowedMethods": [<list-of-methods>], 
         "allowedHeaders": [<list-of-implicit-headers>], 
         "exposedHeaders": [<list-of-exposed-headers>], 
         "isAllowCredentialsEnabled": <true|false>, 
         "maxAgeInSeconds": <seconds> 
      } 
    },
    "routes": [
      {
        "path": "/opportunities",
        "methods": [
          "GET"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
 
        }
      },
      {
        "path": "/opportunities/{optyid}",
        "methods": [
          "PATCH"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
        }
      }
    ]
  }
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>