Authentifizierungsanforderungs- und Autorisierungsanforderungs-Policys hinzufügen
Erfahren Sie, wie Sie Anforderungs-Policys hinzufügen, um Authentifizierung und Autorisierung mit API Gateway bereitzustellen.
Sie können Anforderungs-Policys hinzufügen, um Authentifizierung und Autorisierung bereitzustellen, indem Sie:
- Benutzerdefinierte Zugriffstoken mit mehreren Argumenten, die an Autorisiererfunktionen mit mehreren Argumenten übergeben werden (siehe Authentifizierungs- und Autorisierungsanforderungs-Policys für Zugriffstoken mit mehreren Argumenten und Autorisiererfunktionen hinzufügen (empfohlen))
- Zugriffstoken mit einem Argument, die an Autorisiererfunktionen mit einem Argument übergeben werden (siehe Policys für Authentifizierungs- und Autorisierungsanforderungen für Zugriffstoken mit einem Argument und Autorisiererfunktionen hinzufügen)
Policys für Authentifizierungs- und Autorisierungsanforderungen für Zugriffstoken mit mehreren Dokumenten und Autorisiererfunktionen hinzufügen (empfohlen)
Sie können Anforderungs-Policys hinzufügen, um Authentifizierung und Autorisierung mit benutzerdefinierten Zugriffstoken mit mehreren Argumenten und Autorisiererfunktionen mit mehreren Argumenten bereitzustellen, indem Sie:
Anforderungs-Policys für Authentifizierung und Autorisierung mit mehreren Dokumenten mit der Konsole hinzufügen
So fügen Sie mit der Konsole Authentifizierungsanforderungs-Policys und Autorisierungsanforderungs-Policys für Zugriffstoken mit mehreren Argumenten zu einer API-Deployment-Spezifikation hinzu:
-
Erstellen oder aktualisieren Sie ein API-Deployment mit der Konsole, wählen Sie die Option Völlig neu aus, und geben Sie auf der Seite Basisinformationen Details ein.
Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.
- Wählen Sie Weiter aus, um die Seite Authentifizierung anzuzeigen.
-
Wählen Sie Einzelne Authentifizierung aus, um anzugeben, dass Sie einen einzelnen Authentifizierungsserver für alle Anforderungen verwenden möchten.
Bei diesen Anweisungen wird davon ausgegangen, dass Sie einen einzelnen Authentifizierungsserver verwenden möchten. Wenn Sie alternativ mehrere Authentifizierungsserver verwenden möchten, wählen Sie Multi-Authentifizierung aus, und befolgen Sie die Anweisungen unter Mehrere Authentifizierungsserver mit der Konsole demselben API-Deployment hinzufügen.
-
Aktivieren oder deaktivieren Sie das Kontrollkästchen Anonymen Zugriff aktivieren:, um anzugeben, ob nicht authentifizierte (d.h. anonyme) Endbenutzer auf Routen im API-Deployment zugreifen können.
Standardmäßig ist diese Option nicht ausgewählt. Wenn Sie den Zugriff anonymer Benutzer auf Routen nie zulassen möchten, wählen Sie diese Option nicht aus. Hinweis: Wenn Sie diese Option auswählen, müssen Sie auch explizit jede Route angeben, auf die anonym zugegriffen werden kann. Wählen Sie dazu in der Autorisierungs-Policy jeder einzelnen Route Anonym als Autorisierungstyp aus.
- Wählen Sie in der Optionsliste Authentifizierungstyp die Option Autorisiererfunktion aus.
- Geben Sie die Autorisierungsfunktion mit mehreren Argumenten an, die zur Authentifizierung des Zugriffstokens mit mehreren Argumenten verwendet werden soll:
- Oracle Functions-Anwendung in <compartment-name>: Der Name der Anwendung in OCI Functions, der die Autorisiererfunktion enthält. Sie können eine Anwendung aus einem anderen Compartment auswählen.
- Funktionsname: Den Namen der Autorizer-Funktion in OCI Functions.
- Wählen Sie Autorisiererfunktion für mehrere Argumente aus, um anzugeben, dass Sie ein oder mehrere Elemente einer Anforderung als Zugriffstoken an eine Autorisiererfunktion übergeben möchten, die Zugriffstoken mit mehreren Argumenten akzeptieren kann.
- Geben Sie im Bereich Funktionsargumente eine oder mehrere Kontextvariablen an, die Werte bereitstellen, die als Argumente mit von Ihnen eingegebenen Argumentnamen an die Autorisiererfunktion übergeben werden sollen:
- Geben Sie eine Kontextvariable mit einem Wert an, der als Argument an die Autorisiererfunktion übergeben werden soll:
- Kontexttabelle: Wählen Sie die Kontexttabelle mit der Kontextvariablen aus der Liste aus:
request.query
-Kontexttabelle, die Abfrageparameternamen und -werte enthält, die in der Anforderung enthalten sindrequest.headers
-Kontexttabelle, die in der Anforderung enthaltene Headernamen und -werte enthältrequest.cert
-Kontexttabelle, die eine Base64-codierte Version des Zertifikats enthält, die von einem API-Client präsentiert und bei einem mTLS-Handshake erfolgreich validiert wurde- Kontexttabelle
request.host
, die den Namen des Hosts enthält, an den die Anforderung gesendet wurde (aus dem HeaderfeldHost
in der Anforderung extrahiert) request.body
-Kontexttabelle, die den Text der Anforderung enthält
- Headername oder Abfrageparametername: Wenn Sie die Kontexttabelle
request.headers
oderrequest.params
ausgewählt haben, geben Sie den Namen des Headers oder Abfrageparameters ein, den Sie an die Autorisiererfunktion übergeben möchten. Beispiel:X-Api-Key
,state
. - Argumentname: Geben Sie den Namen des Arguments ein, dem der Wert der Kontextvariable zugewiesen werden soll. Das Argument wird an die Autorisiererfunktion übergeben. Der eingegebene Argumentname muss dem Argumentnamen entsprechen, den die Autorisiererfunktion erwartet.
- Kontexttabelle: Wählen Sie die Kontexttabelle mit der Kontextvariablen aus der Liste aus:
- Geben Sie bei Bedarf zusätzliche Kontextvariablen und Argumente an (wählen Sie gegebenenfalls Weiteres Argument aus).
- Geben Sie eine Kontextvariable mit einem Wert an, der als Argument an die Autorisiererfunktion übergeben werden soll:
-
Optional können Sie anpassen, wie die Antwort von einer Autorisiererfunktion mit mehreren Argumenten gecacht wird:
- Wählen Sie Erweiterte Optionen anzeigen.
Im Bereich Caching von Funktionsergebnissen wird angezeigt, welche Argumente im Cacheschlüssel vorhanden sind. Der Cacheschlüssel identifiziert die von der Autorisiererfunktion zurückgegebene gecachte Antwort eindeutig anhand von Argumenten und Argumentwerten, die in der ursprünglichen Authentifizierungsanforderung übergeben wurden. Standardmäßig werden alle Argumente und Argumentwerte (mit Ausnahme eines Arguments mit einem Wert aus der Kontexttabelle
request.body
), die Sie für die Übergabe an die Autorisiererfunktion angegeben haben, zum Erstellen des Cacheschlüssels verwendet. - Um Argumente zum Cacheschlüssel hinzuzufügen oder daraus zu entfernen, wählen Sie Bearbeiten aus.
- Aktivieren oder deaktivieren Sie die Argumente, die an die Autorisiererfunktion übergeben wurden, um sie in den Cache-Schlüssel einzuschließen oder daraus auszuschließen.
Siehe Hinweise zum Caching von Ergebnissen der Autorisiererfunktion mit mehreren Argumenten.
- Wählen Sie Erweiterte Optionen anzeigen.
-
Optional können Sie die Verarbeitung einer nicht erfolgreichen Authentifizierungsantwort von einer Autorisiererfunktion mit mehreren Argumenten anpassen, indem Sie eine Validierungsfehler-Policy einrichten:
- Wählen Sie Erweiterte Optionen anzeigen.
Im Bereich Benutzerdefinierte Antwort für nicht erfolgreiche Authentifizierung werden der HTTP-Statuscode und der Nachrichtentext angezeigt, der an den API-Client zurückgegeben werden soll, wenn die Autorisiererfunktion die Anforderung nicht authentifizieren kann. Standardmäßig sendet das API-Gateway einen HTTP-401-Statuscode und den
WWW-Authenticate
-Header in der Antwort. Siehe Notizen zu Validierungsfehler-Policys und Behandlung nicht erfolgreicher Authentifizierungsantworten aus Autorisiererfunktionen mit mehreren Argumenten. - Geben Sie einen Statuscode (und einen optionalen Nachrichtentext) an, der an den API-Client zurückgegeben werden soll, wenn die Autorisiererfunktion die Anforderung nicht authentifizieren kann:
- HTTP-Statuscode: Geben Sie einen alternativen HTTP-Statuscode ein (Beispiel:
500
). Alternativ können Sie eine Kontextvariable aufnehmen, um den von der Autorisiererfunktion zurückgegebenen Code zurückzugeben. Beispiel: Wenn die Autorisiererfunktion einen Antwortcode im ParameterresponseCode
zurückgibt, geben Sierequest.auth[responseCode]
an. - Nachrichtentext: Geben Sie einen Nachrichtentext ein. Beispiel:
Unfortunately, authentication failed.
Der Nachrichtentext kann eine beliebige Kontextvariable enthalten (außerrequest.body
). Beispiel:Unfortunately, authentication failed ${request.auth[my-auth-variable]}
.
- HTTP-Statuscode: Geben Sie einen alternativen HTTP-Statuscode ein (Beispiel:
-
Ändern Sie optional die Header der Antwort, die das API-Gateway an den API-Client zurückgibt, indem Sie Erweiterte Optionen anzeigen auswählen und eine Headertransformationsantwort-Policy angeben:
-
Um die in einer Antwort enthaltenen Header zu begrenzen, geben Sie Folgendes an:
-
Um den Namen eines Headers in einer Antwort (unter Beibehaltung des ursprünglichen Wertes) zu ändern, geben Sie Folgendes an:
-
Um einer Antwort einen neuen Header hinzuzufügen (oder die Werte eines vorhandenen Headers zu ändern oder beizubehalten, der bereits in einer Antwort enthalten ist), geben Sie Folgendes an:
Weitere Informationen zu Headertransformationsantwort-Policys finden Sie unter Headertransformationsantwort-Policys hinzufügen.
-
- Wählen Sie Erweiterte Optionen anzeigen.
-
Wählen Sie Weiter aus, um Details zu einzelnen Routen im API-Deployment auf der Seite Routen einzugeben.
-
Geben Sie im Abschnitt Route 1 die erste Route im API-Deployment an, die einem Backend-Service einen Pfad und eine oder mehrere Methoden zuordnet:
-
Pfad: Einen Pfad zum Backend-Service für API-Aufrufe, die die aufgeführten Methoden verwenden. Beachten Sie, dass der von Ihnen angegebene Routenpfad:
- relativ zum Deployment-Pfadpräfix ist
- einen Schrägstrich ( / ) vorangestellt haben muss. Es kann nur ein einzelner Schrägstrich verwendet werden
- mehrere Schrägstriche enthalten (sofern diese nicht aufeinander folgen) und mit einem Schrägstrich enden kann
- alphanumerische Zeichen in Großbuchstaben und Kleinbuchstaben enthalten kann
- die folgenden Sonderzeichen enthalten kann:
$ - _ . + ! * ' ( ) , % ; : @ & =
- Parameter und Platzhalter enthalten kann (siehe Pfadparameter und Platzhalter zu Routenpfaden hinzufügen)
- Methoden: Eine oder mehrere Methoden, die vom Backend-Service akzeptiert werden (durch Komma getrennt). Beispiel:
GET, PUT
. -
Ein einzelnes Backend hinzufügen oder Mehrere Backends hinzufügen: Gibt an, ob alle Anforderungen an dasselbe Backend weitergeleitet oder Anforderungen entsprechend der von Ihnen eingegebenen Kontextvariable und Regeln an verschiedene Backends weitergeleitet werden sollen.
Bei diesen Anweisungen wird davon ausgegangen, dass Sie ein einzelnes Backend verwenden möchten. Wählen Sie daher Ein einzelnes Backend hinzufügen aus. Wenn Sie alternativ andere Backends verwenden möchten, wählen Sie Mehrere Backends hinzufügen aus, und befolgen Sie die Anweisungen unter Dynamische Backend-Auswahl mit der Konsole zu einer API-Deployment-Spezifikation hinzufügen.
-
Backend-Typ: Den Typ des Backend-Service. Wählen Sie dazu eine der folgenden Optionen:
- HTTP: Bei einem HTTP-Backend müssen Sie auch eine URL und Timeoutdetails angeben. Außerdem müssen Sie angeben, ob die SSL-Überprüfung deaktiviert werden soll (siehe HTTP- oder HTTPS-URL als API-Gateway-Backend hinzufügen).
- Oracle Functions: Wenn Sie ein OCI Functions-Backend verwenden, müssen Sie auch die Anwendung und Funktion angeben (siehe Funktion in OCI Functions als API-Gateway-Backend hinzufügen).
- Standardantwort: Bei einem Standardantwort-Backend müssen Sie auch den HTTP-Statuscode, den Inhalt im Hauptteil der Antwort und mindestens ein HTTP-Headerfeld angeben (siehe Standardantworten als API-Gateway-Backend hinzufügen).
-
-
Um eine Autorisierungs-Policy anzugeben, die für eine einzelne Route gilt, wählen Sie Routenanforderungs-Policys einblenden und dann die Schaltfläche Hinzufügen neben Autorisierung aus, und geben Sie:
-
Autorisierungstyp: Gibt an, wie Zugriff auf die Route erteilt wird. Wählen Sie eine der folgenden Optionen aus:
- Beliebig: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion auch einen der Zugriffsgeltungsbereiche zurückgegeben hat, die Sie im Feld Zulässiger Geltungsbereich angegeben haben. In diesem Fall zeigt die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy keine Wirkung.
- Anonym: Zugriff wird allen Endbenutzern erteilt, selbst wenn diese nicht erfolgreich von der Autorisiererfunktion authentifiziert wurden. In diesem Fall müssen Sie die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy ausgewählt haben.
- Nur Authentifizierung: Zugriff wird nur Endbenutzern erteilt, die von der Autorisiererfunktion erfolgreich authentifiziert wurden. In diesem Fall zeigt die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy keine Wirkung.
- Zulässiger Geltungsbereich: Wenn Sie Beliebig als Autorisierungstyp ausgewählt haben, geben Sie eine kommagetrennte Liste mit mindestens einer Zeichenfolge ein, die den von der Autorisiererfunktion zurückgegebenen Zugriffsgeltungsbereichen entspricht. Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion einen der angegebenen Zugriffsgeltungsbereiche zurückgibt. Beispiel:
read:hello
Hinweis
Wenn Sie keine Autorisierungs-Policy für eine bestimmte Route angeben, wird der Zugriff basierend auf der Annahme erteilt, dass eine solche Policy vorhanden ist, und der Autorisierungstyp wird auf Nur Authentifizierung gesetzt. Anders ausgedrückt: Ungeachtet der Einstellung der Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy können:
- nur authentifizierte Endbenutzer auf die Route zugreifen
- alle authentifizierten Endbenutzer auf die Route zugreifen, und zwar unabhängig von den Zugriffsgeltungsbereichen, die von der Autorisiererfunktion zurückgegeben werden
- anonyme Endbenutzer nicht auf die Route zugreifen
-
- Wählen Sie Änderungen anwenden und dann Weiter aus, um die Details zu prüfen, die Sie für das API-Deployment eingegeben haben.
- Wählen Sie Erstellen oder Änderungen speichern aus, um das API-Deployment zu erstellen oder zu aktualisieren.
- (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).
JSON-Datei bearbeiten, um Anforderungs-Policys für Multi-Argument-Authentifizierung und -Autorisierung hinzuzufügen
So fügen Sie Authentifizierungs- und Autorisierungsanforderungs-Policys für Zugriffstoken mit mehreren Argumenten zu einer API-Deployment-Spezifikation in einer JSON-Datei hinzu:
-
Bearbeiten Sie mit Ihrem bevorzugten JSON-Editor die vorhandene API-Deployment-Spezifikation, der Sie eine Authentifizierungs- und Autorisierungsfunktionalität hinzufügen möchten, oder erstellen Sie eine neue API-Deployment-Spezifikation (siehe API-Deployment-Spezifikation erstellen).
Die API-Deployment-Spezifikation beinhaltet zumindest einen
routes
-Abschnitt, der Folgendes enthält:- Einen Pfad. Beispiel:
/hello
- Mindestens eine Methode. Beispiel:
GET
- Eine Definition eines Backends. Beispiel: Eine URL oder die OCID einer Funktion in OCI Functions.
Beispiel: Die folgende Basisspezifikation für das API-Deployment definiert eine einfache serverlose Hello World-Funktion in OCI Functions als einzelnes Backend:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
- Einen Pfad. Beispiel:
-
Fügen Sie eine
authentication
-Anforderungs-Policy hinzu, die für alle Routen in der API-Deployment-Spezifikation gilt:-
Fügen Sie, falls noch nicht vorhanden, einen
requestPolicies
-Abschnitt vor demroutes
-Abschnitt ein. Beispiel:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
Fügen Sie die folgende
authentication
-Policy zum neuenrequestPolicies
-Abschnitt hinzu.{ "requestPolicies": { "authentication": { "type": "<type-value>", "isAnonymousAccessAllowed": <true|false>, "functionId": "<function-ocid>", "parameters": { "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>" }, "cacheKey": [ "<cache-key-argument-n>", "<cache-key-argument-n>" ] } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
Dabei gilt:
-
<type-value>
ist der Authentifizierungstyp. Um eine Autorisiererfunktion für die Authentifizierung zu verwenden, geben SieCUSTOM_AUTHENTICATION
an. "isAnonymousAccessAllowed": <true|false>
gibt optional an, ob nicht authentifizierte (d.h. anonyme) Endbenutzer auf Routen in der API-Deployment-Spezifikation zugreifen können. Wenn Sie den Zugriff anonymer Endbenutzer auf Routen nie zulassen möchten, setzen Sie diese Eigenschaft auffalse
. Wenn Sie diese Eigenschaft nicht in dieauthentication
-Policy aufnehmen, wird standardmäßigfalse
verwendet. Hinweis: Wenn Sie diese Eigenschaft aufnehmen und auftrue
setzen, müssen Sie auch explizit jede Route angeben, auf die anonym zugegriffen werden kann. Setzen Sie dazu in derauthorization
-Policy jeder einzelnen Route dietype
-Eigenschaft auf"ANONYMOUS"
.-
<function-ocid>
ist die OCID der Autorizer-Funktion, die in OCI Functions bereitgestellt wurde. <argument-n>
ist der Name des Arguments, dem der Wert einer und nur einer Kontextvariablen zugewiesen werden soll. Das Argument wird an die Autorisiererfunktion übergeben. Der eingegebene Argumentname muss dem Argumentnamen entsprechen, den die Autorisiererfunktion erwartet. Sie können mehrere Argument-Kontext-Variablenpaare einschließen.<context-variable>
ist eine Kontextvariable, deren Wert Sie dem entsprechenden Argument zuweisen möchten.<context-variable>
muss das Format<context-table-name>
oder<context-table-name>[<key>]
aufweisen, wobei<context-table-name>
einer der folgenden Werte ist:request.query
, eine Kontexttabelle mit Abfrageparameternamen und -werten, die in der Anforderung enthalten sind. Wenn Sie einen Abfrageparameter angeben möchten, müssen Sie sowohl die Kontexttabellerequest.query
als auch den Namen des Abfrageparameters als Schlüssel im Formatrequest.query[<query-parameter-name>]
angeben. Beispiel:request.query[state]
request.headers
, eine Kontexttabelle mit Headernamen und Werten, die in der Anforderung enthalten sind. Wenn Sie einen Header angeben möchten, müssen Sie sowohl die Kontexttabellerequest.headers
als auch den Namen des Headers als Schlüssel im Formatrequest.headers[<header-name>]
angeben. Beispiel:request.headers[X-Api-Key]
request.cert
-Kontexttabelle, die eine Base64-codierte Version des Zertifikats enthält, die von einem API-Client präsentiert und bei einem mTLS-Handshake erfolgreich validiert wurderequest.host
, eine Kontexttabelle mit dem Namen des Hosts, an den die Anforderung gesendet wurde (aus demHost
-Headerfeld in der Anforderung extrahiert)request.body
, eine Kontexttabelle, die den Body der Anforderung enthält.
"cacheKey": ["<cache-key-argument-n>", "<cache-key-argument-n>"]
beschränkt optional den Cacheschlüssel auf die Verwendung der angegebenen Argumente. Der Cacheschlüssel identifiziert die von der Autorisiererfunktion zurückgegebene gecachte Antwort eindeutig mit Argumenten und Argumentwerten, die in der ursprünglichen Authentifizierungsanforderung übergeben wurden. Standardmäßig werden alle Argumente und Argumentwerte (mit Ausnahme eines Arguments mit einem Wert aus der Kontexttabellerequest.body
) in der Listeparameters: {…}
zum Erstellen des Cacheschlüssels verwendet. Ein Argument, das Sie für<cache-key-argument-n>
angeben, muss eines der Argumente in der Listeparameters: {…}
sein. Siehe Hinweise zum Caching von Ergebnissen der Autorisiererfunktion mit mehreren Argumenten.
-
- Fügen Sie optional eine
validationFailurePolicy
zum Policy-Abschnittauthentication
hinzu:{ "requestPolicies": { "authentication": { "type": "<type-value>", "isAnonymousAccessAllowed": <true|false>, "functionId": "<function-ocid>", "parameters": { "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>", "<argument-n>": "<context-variable>" }, "cacheKey": [ "<cache-key-argument-n>", "<cache-key-argument-n>" ], "validationFailurePolicy": { "type": "MODIFY_RESPONSE", "responseCode": "<alternative-response-code>", "responseMessage": "<custom-message-body>", "responseTransformations": { "headerTransformations": { <valid-header-transformation-response-policy> } } } } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
Dabei gilt:
- Mit
"validationFailurePolicy": {…}
können Sie optional den HTTP-Statuscode, den Nachrichtentext und die Header in der Antwort an den API-Client ändern, wenn die Autorisiererfunktion eine Anforderung nicht authentifizieren kann. Standardmäßig sendet das API-Gateway einen HTTP 401-Statuscode und denWWW-Authenticate
-Header in der Antwort. Siehe Hinweise zu Validierungsfehler-Policys und zur Verarbeitung nicht erfolgreicher Authentifizierungsantworten aus Autorisiererfunktionen mit mehreren Argumenten. <policy-type>
ist der Typ der Validierungsfehler-Policy. Um die Antwort zu ändern, geben SieMODIFY_RESPONSE
an."responseCode": "<alternative-response-code>"
gibt einen alternativen HTTP-Statuscode an. Beispiel:"responseCode": "500"
. Alternativ können Sie eine Kontextvariable aufnehmen, um den von der Autorisiererfunktion zurückgegebenen Code zurückzugeben. Beispiel: Wenn die Autorisiererfunktion einen Antwortcode im ParameterresponseCode
zurückgibt, geben Sie"request.auth[responseCode]"
an."responseMessage": "<custom-message-body>"
gibt den Inhalt an, der in den Nachrichtentext aufgenommen werden soll. Beispiel:"responseMessage": "Unfortunately, authentication failed."
. Der Nachrichtentext kann eine beliebige Kontextvariable enthalten (mit Ausnahme vonrequest.body
). Beispiel:"responseMessage": "Unfortunately, authentication failed ${request.auth[my-auth-variable]}"
."headerTransformations": {<valid-header-transformation-response-policy>}
ist eine gültige Headertransformationsantwort-Policy. Siehe Headertransformationsantwort-Policys durch Bearbeiten einer JSON-Datei hinzufügen.
- Mit
-
-
Fügen Sie eine
authorization
-Anforderungs-Policy für jede Route in der API-Deployment-Spezifikation hinzu:-
Fügen Sie, falls noch nicht vorhanden, einen
requestPolicies
-Abschnitt nach dembackend
-Abschnitt der ersten Route ein. Beispiel:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": {} } ] }
-
Fügen Sie die folgende
authorization
-Policy zumrequestPolicies
-Abschnitt hinzu:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">, "allowedScope": [ "<scope>" ] } } } ] }
Dabei gilt:
-
"type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">
gibt an, wie Zugriff auf die Route erteilt werden soll:"AUTHENTICATION_ONLY"
: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden. In diesem Fall zeigt die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation keine Wirkung."ANY_OF"
: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion auch einen der Zugriffsgeltungsbereiche zurückgegeben hat, die Sie in der EigenschaftallowedScope
angegeben haben. In diesem Fall zeigt die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation keine Wirkung."ANONYMOUS"
: Zugriff wird allen Endbenutzern erteilt, selbst wenn diese nicht erfolgreich authentifiziert wurden. In diesem Fall müssen Sie die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation explizit auftrue
setzen.
-
"allowedScope": [ "<scope>" ]
ist eine kommagetrennte Liste mit mindestens einer Zeichenfolge, die den von der Autorisiererfunktion zurückgegebenen Zugriffsbereichen entspricht. In diesem Fall müssen Sie dietype
-Eigenschaft auf"ANY_OF"
setzen (die"allowedScope"
-Eigenschaft wird ignoriert, wenn dietype
-Eigenschaft auf"AUTHENTICATION_ONLY"
oder"ANONYMOUS"
gesetzt wurde). Wenn Sie mehr als einen Geltungsbereich angeben, wird der Zugriff auf die Route erteilt, sobald einer der von Ihnen angegebenen Geltungsbereiche von der Autorisiererfunktion zurückgegeben wird.
Beispiel: Die folgende Anforderungs-Policy definiert eine
/hello
-Route, die nur authentifizierten Endbenutzern mit dem Geltungsbereichread:hello
Zugriff gewährt:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", . . . } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": "ANY_OF", "allowedScope": [ "read:hello" ] } } } ] }
-
- Fügen Sie eine
authorization
-Anforderungs-Policy für alle restlichen Routen in der API-Deployment-Spezifikation hinzu.
Hinweis
Wenn Sie keine
authorization
-Policy für eine bestimmte Route angeben, wird der Zugriff basierend auf der Annahme erteilt, dass eine solche Policy vorhanden ist, und dietype
-Eigenschaft wird auf"AUTHENTICATION_ONLY"
gesetzt. Anders ausgedrückt: Ungeachtet der Einstellung derisAnonymousAccessAllowed
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation können:- nur authentifizierte Endbenutzer auf die Route zugreifen
- alle authentifizierten Endbenutzer auf die Route zugreifen, und zwar unabhängig von den Zugriffsgeltungsbereichen, die von der Autorisiererfunktion zurückgegeben werden
- anonyme Endbenutzer nicht auf die Route zugreifen
-
- Speichern Sie die JSON-Datei, die die API-Deployment-Spezifikation enthält.
-
Verwenden Sie die API-Deployment-Spezifikation, wenn Sie ein API-Deployment wie folgt erstellen oder aktualisieren:
- Durch Angabe der JSON-Datei in der Konsole bei Auswahl der Option Vorhandene API hochladen
- Durch Angabe der JSON-Datei in einer Anforderung an die REST-API von API-Gateway
Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.
- (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).
Hinweise zur Verwendung von Multi-Argument-Autorizer-Funktionen und Zugriffstoken
Hinweise zum Caching von Ergebnissen der Multi-Argument-Autorisierungsfunktion
Wenn Autorisiererfunktionen verwendet werden, cacht das API-Gateway die Antwort standardmäßig intern aus der Autorisiererfunktion. Durch das Caching der Antwort kann die Antwort später wieder verwendet werden, um auf eine ähnliche Authentifizierungsanforderung zu reagieren, ohne die Autorisiererfunktion erneut aufzurufen.
Um eine gecachte Antwort eindeutig zu identifizieren, die von einer Autorisiererfunktion für eine Authentifizierungsanforderung zurückgegeben wird, verwendet das API-Gateway einen Cache-Schlüssel, der aus den Argumenten und Argumentwerten abgeleitet wird, die an die Autorisiererfunktion übergeben wurden, die die Antwort ausgelöst hat. Wenn die Argument- und Argumentwerte einer nachfolgenden Authentifizierungsanforderung mit einem Cache-Schlüssel übereinstimmen, wird die gecachte Antwort verwendet, anstatt die Autorisiererfunktion unnötig aufzurufen.
Bei Autorisiererfunktionen mit mehreren Argumenten werden standardmäßig alle Argumente und Argumentwerte (mit Ausnahme eines Arguments mit einem Wert aus der Kontexttabelle request.body
), die an die Autorisiererfunktion übergeben werden, zum Erstellen des Cache-Schlüssels verwendet. Sie können jedoch die Argumente und Argumentwerte anpassen, die zum Erstellen des Cache-Schlüssels verwendet werden, sodass der Cache-Schlüssel nur die von Ihnen angegebenen Argumente und Argumentwerte enthält. Wenn Sie Argumente und Argumentwerte aus dem Cacheschlüssel entfernen, besteht möglicherweise das Risiko, dass eine eingehende ungültige Authentifizierungsanforderung mit dem Cacheschlüssel einer vorherigen Antwort mit einer erfolgreich authentifizierten Anforderung übereinstimmt. Entfernen Sie Argumente nur aus dem Cache-Schlüssel, wenn Sie sicher sind, dass die Argumente keine Rolle bei der Authentifizierung der Anforderung spielen.
Hinweise zu Validierungsfehler-Policys und zur Verarbeitung nicht erfolgreicher Authentifizierungsantworten aus Autorisiererfunktionen mit mehreren Argumenten
Wenn Sie eine Autorisiererfunktion mit mehreren Argumenten verwenden, können Sie eine Validierungsfehler-Policy definieren. Mit einer Validierungsfehler-Policy können Sie den HTTP-Statuscode, die Nachricht und die Antwortheader anpassen, die das API-Gateway an einen API-Client sendet, falls eine Authentifizierungsantwort von einer Autorisiererfunktion mit mehreren Argumenten nicht erfolgreich war.
Eine Autorisiererfunktion mit mehreren Argumenten muss eine HTTP 200-Antwort zurückgeben (mit dem JSON-Hauptteil der Antwort, der "active": false
und einen WWW-Authenticate
-Header enthält), wenn ein Zugriffstoken erfolgreich mit einem Identitätsprovider verifiziert wurde, der Identitätsprovider jedoch festgestellt hat, dass das Token ungültig ist.
Wenn die Autorisiererfunktion eine HTTP 200-Antwort mit "active": false
im Antwortbody zurückgibt, sendet das API-Gateway standardmäßig einen HTTP 401-Statuscode an den API-Client (zusammen mit dem WWW-Authenticate
-Header in der Antwort). Sie können jedoch eine Validierungsfehler-Policy definieren, um einen anderen zurückzugebenden HTTP-Statuscode anzugeben und eine benutzerdefinierte Nachricht anzugeben, die im Antwortbody zurückgegeben werden soll.
Sie können auch eine Headertransformationsantwort-Policy in eine Validierungsfehler-Policy aufnehmen, um den Header der Antwort zu ändern, die das API-Gateway an den API-Client zurückgibt. Wenn Sie eine Headertransformationsantwort-Policy in eine Validierungsfehler-Policy aufnehmen, können Sie:
- In einer Antwort enthaltene Header begrenzen
- den Namen eines Headers in einer Antwort (unter Berücksichtigung des ursprünglichen Wertes) ändern
- einer Antwort einen neuen Header hinzufügen (oder die Werte eines vorhandenen Headers ändern oder beibehalten, der bereits in einer Antwort enthalten ist)
Weitere Informationen zum Hinzufügen einer Validierungsfehler-Policy finden Sie unter JSON-Datei zum Hinzufügen von Anforderungs-Policys für Authentifizierung und Autorisierung mit mehreren Argumenten bearbeiten.
Beispiel-Deployment-Spezifikation mit Zugriffstoken mit mehreren Argumenten
Die folgende API-Deployment-Spezifikation definiert:
- Eine Authentifizierungsanforderungs-Policy, die zur Ausführung der Authentifizierung eine Autorisiererfunktion mit mehreren Argumenten aufruft.
- Eine Autorisierungsanforderungs-Policy, die angibt, was authentifizierte Endbenutzer tun können.
{
"requestPolicies": {
"authentication": {
"type": "CUSTOM_AUTHENTICATION",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq",
"isAnonymousAccessAllowed": true,
"parameters": {
"xapikey": "request.headers[X-Api-Key]",
"referer": "request.headers[Referer]",
"state": "request.query[state]",
"city": "request.query[city]",
"cert": "request.cert",
"body": "request.body",
"host": "request.host"
},
"cacheKey": [
"xapikey", "referer"
],
"validationFailurePolicy": {
"type": "MODIFY_RESPONSE",
"responseCode": "request.auth[responseCode]",
"responseMessage": "Unfortunately, authentication failed.",
"responseTransformations": {
"headerTransformations": {
"setHeaders": {
"items": [
{
"name": "Location",
"values": [
"${request.auth[location]}"
]
}
]
},
"filterHeaders": {
"type": "BLOCK",
"items": [
{
"name": "topSecret"
}
]
}
}
}
}
}
},
"routes": [
{
"path": "/hello",
"methods": ["GET"],
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
},
"requestPolicies": {
"authorization": {
"type": "ANY_OF",
"allowedScope": [ "read:hello" ]
}
}
}
]
}
Die Authentifizierungsanforderungs-Policy in dieser API-Deployment-Spezifikation:
- Gibt die Autorisiererfunktion mit mehreren Argumenten an, die zur Authentifizierung aufgerufen werden soll, und definiert die Argumente
xapikey
,referer
,state
,city
,cert
,body
undhost
, die an die Autorisiererfunktion übergeben werden sollen. Die Werte dieser Argumente werden aus Kontextvariablen abgerufen, die Werte aus der ursprünglichen Anforderung enthalten. - Definiert einen benutzerdefinierten Cacheschlüssel, um die von der Autorisiererfunktion zurückgegebene gecachte Antwort eindeutig zu identifizieren. Anstatt den Standardcacheschlüssel zu verwenden (der alle an die Autorisiererfunktion gesendeten Argumente enthält und empfohlen wird), gibt diese Authentifizierungsanforderungs-Policy an, dass der Cacheschlüssel nur die Werte der Argumente
xapikey
undreferrer
umfasst, die an die Autorisiererfunktion übergeben werden. - Umfasst eine Validierungsfehler-Policy, mit der die Standardantwort für Validierungsfehler geändert wird, um den HTTP 401-Standardstatuscode durch den Wert der Kontextvariablen
request.auth[responseCode]
zu ersetzen. Die Kontextvariablerequest.auth[responseCode]
enthält den Wert eines Authentifizierungsparameters (in diesem FallresponseCode
), der von der Autorisiererfunktion zurückgegeben wird. Ebenso wird die Standardfehlermeldung für die Validierung durch eine benutzerdefinierte Meldungszeichenfolge ("Unfortunately, authentication failed."
) ersetzt. - Umfasst eine Headertransformationsanforderungs-Policy innerhalb der Validierungsfehler-Policy, die den
location
-Header zur Validierungsfehlerantwort hinzufügt. Derlocation
-Header erhält den Wert der Kontextvariablenrequest.auth[location]
, die den Wert eines Authentifizierungsparameters (in diesem Fall mit dem Namenlocation
) enthält, der von der Autorisiererfunktion zurückgegeben wird. Die Headertransformationsanforderungs-Policy entfernt auch Header mit dem NamentopSecret
aus der Antwort.
Mit der Autorisierungsanforderungs-Policy in dieser API-Deployment-Spezifikation können Endbenutzer, die von der Autorisiererfunktion authentifiziert wurden, und mit dem Geltungsbereich read:hello
nur auf die Route /hello
zugreifen.
Authentifizierungs- und Autorisierungsanforderungs-Policys für Zugriffstoken mit einem Argument und Autorisiererfunktionen hinzufügen
Sie können Anforderungs-Policys hinzufügen, um Authentifizierung und Autorisierung mit Zugriffstoken mit einem Argument und Autorisiererfunktionen mit einem Argument bereitzustellen, indem Sie:
Oracle empfiehlt aufgrund ihrer zusätzlichen Vielseitigkeit die Verwendung von Autorisiererfunktionen mit mehreren Argumenten anstelle von Autorisiererfunktionen mit nur einem Argument. Autorisiererfunktionen mit nur einem Argument wurden in früheren Releases bereitgestellt und werden weiterhin unterstützt. Da Autorisiererfunktionen mit mehreren Argumenten jedoch auch Zugriffstoken mit einem Argument akzeptieren können, die in Anforderungsheadern und Abfrageparametern enthalten sind, gibt es keinen Grund, neue Autorisiererfunktionen mit einem Argument zu erstellen. Darüber hinaus sind Autorisiererfunktionen mit nur einem Argument für eine Einstellung in einem zukünftigen Release geplant.
Anforderungs-Policys für Authentifizierung und Autorisierung mit einem Argument hinzufügen
So fügen Sie mit der Konsole Authentifizierungsanforderungs-Policys und Autorisierungsanforderungs-Policys für Zugriffstoken mit einem Argument zu einer API-Deployment-Spezifikation hinzu:
-
Erstellen oder aktualisieren Sie ein API-Deployment mit der Konsole, wählen Sie die Option Völlig neu aus, und geben Sie auf der Seite Basisinformationen Details ein.
Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.
- Wählen Sie Weiter aus, um die Seite Authentifizierung anzuzeigen.
-
Wählen Sie Einzelne Authentifizierung aus, um anzugeben, dass Sie einen einzelnen Authentifizierungsserver für alle Anforderungen verwenden möchten.
Bei diesen Anweisungen wird davon ausgegangen, dass Sie einen einzelnen Authentifizierungsserver verwenden möchten. Wenn Sie alternativ mehrere Authentifizierungsserver verwenden möchten, wählen Sie Multi-Authentifizierung aus, und befolgen Sie die Anweisungen unter Mehrere Authentifizierungsserver mit der Konsole demselben API-Deployment hinzufügen.
-
Aktivieren oder deaktivieren Sie das Kontrollkästchen Anonymen Zugriff aktivieren:, um anzugeben, ob nicht authentifizierte (d.h. anonyme) Endbenutzer auf Routen im API-Deployment zugreifen können.
Standardmäßig ist diese Option nicht ausgewählt. Wenn Sie den Zugriff anonymer Benutzer auf Routen nie zulassen möchten, wählen Sie diese Option nicht aus. Hinweis: Wenn Sie diese Option auswählen, müssen Sie auch explizit jede Route angeben, auf die anonym zugegriffen werden kann. Wählen Sie dazu in der Autorisierungs-Policy jeder einzelnen Route Anonym als Autorisierungstyp aus.
- Wählen Sie in der Optionsliste Authentifizierungstyp die Option Autorisiererfunktion aus.
- Geben Sie die Autorisiererfunktion mit einem Argument an, die zur Authentifizierung des Zugriffstokens mit einem Argument verwendet werden soll:
- Oracle Functions-Anwendung in <compartment-name>: Der Name der Anwendung in OCI Functions, der die Autorisiererfunktion enthält. Sie können eine Anwendung aus einem anderen Compartment auswählen.
- Funktionsname: Den Namen der Autorizer-Funktion in OCI Functions.
- Wählen Sie Autorisiererfunktion für ein einzelnes Argument aus, um anzugeben, dass Sie ein Zugriffstoken für ein einzelnes Argument in einem Header oder Abfrageparameter an eine Autorisiererfunktion für ein einzelnes Argument übergeben möchten.
- Geben Sie im Bereich Zugriffstoken das Zugriffstoken an, das für die Authentifizierung verwendet werden soll:
- Tokenspeicherort: Wählen Sie Header oder Abfrageparameter aus, um den Speicherort des Zugriffstokens in der Anforderung anzugeben.
- Tokenheadername oder Tokenparametername: Geben Sie je nach Speicherort des Zugriffstokens den Namen des Headers oder Abfrageparameters ein, der das Zugriffstoken enthält.
-
Wählen Sie Weiter aus, um Details zu einzelnen Routen im API-Deployment auf der Seite Routen einzugeben.
-
Geben Sie im Abschnitt Route 1 die erste Route im API-Deployment an, die einem Backend-Service einen Pfad und eine oder mehrere Methoden zuordnet:
-
Pfad: Einen Pfad zum Backend-Service für API-Aufrufe, die die aufgeführten Methoden verwenden. Beachten Sie, dass der von Ihnen angegebene Routenpfad:
- relativ zum Deployment-Pfadpräfix ist
- einen Schrägstrich ( / ) vorangestellt haben muss. Es kann nur ein einzelner Schrägstrich verwendet werden
- mehrere Schrägstriche enthalten (sofern diese nicht aufeinander folgen) und mit einem Schrägstrich enden kann
- alphanumerische Zeichen in Großbuchstaben und Kleinbuchstaben enthalten kann
- die folgenden Sonderzeichen enthalten kann:
$ - _ . + ! * ' ( ) , % ; : @ & =
- Parameter und Platzhalter enthalten kann (siehe Pfadparameter und Platzhalter zu Routenpfaden hinzufügen)
- Methoden: Eine oder mehrere Methoden, die vom Backend-Service akzeptiert werden (durch Komma getrennt). Beispiel:
GET, PUT
. -
Ein einzelnes Backend hinzufügen oder Mehrere Backends hinzufügen: Gibt an, ob alle Anforderungen an dasselbe Backend weitergeleitet oder Anforderungen entsprechend der von Ihnen eingegebenen Kontextvariable und Regeln an verschiedene Backends weitergeleitet werden sollen.
Bei diesen Anweisungen wird davon ausgegangen, dass Sie ein einzelnes Backend verwenden möchten. Wählen Sie daher Ein einzelnes Backend hinzufügen aus. Wenn Sie alternativ andere Backends verwenden möchten, wählen Sie Mehrere Backends hinzufügen aus, und befolgen Sie die Anweisungen unter Dynamische Backend-Auswahl mit der Konsole zu einer API-Deployment-Spezifikation hinzufügen.
-
Backend-Typ: Den Typ des Backend-Service. Wählen Sie dazu eine der folgenden Optionen:
- HTTP: Bei einem HTTP-Backend müssen Sie auch eine URL und Timeoutdetails angeben. Außerdem müssen Sie angeben, ob die SSL-Überprüfung deaktiviert werden soll (siehe HTTP- oder HTTPS-URL als API-Gateway-Backend hinzufügen).
- Oracle Functions: Wenn Sie ein OCI Functions-Backend verwenden, müssen Sie auch die Anwendung und Funktion angeben (siehe Funktion in OCI Functions als API-Gateway-Backend hinzufügen).
- Standardantwort: Bei einem Standardantwort-Backend müssen Sie auch den HTTP-Statuscode, den Inhalt im Hauptteil der Antwort und mindestens ein HTTP-Headerfeld angeben (siehe Standardantworten als API-Gateway-Backend hinzufügen).
-
-
Um eine Autorisierungs-Policy anzugeben, die für eine einzelne Route gilt, wählen Sie Routenanforderungs-Policys einblenden und dann die Schaltfläche Hinzufügen neben Autorisierung aus, und geben Sie:
-
Autorisierungstyp: Gibt an, wie Zugriff auf die Route erteilt wird. Wählen Sie eine der folgenden Optionen aus:
- Beliebig: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion auch einen der Zugriffsgeltungsbereiche zurückgegeben hat, die Sie im Feld Zulässiger Geltungsbereich angegeben haben. In diesem Fall zeigt die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy keine Wirkung.
- Anonym: Zugriff wird allen Endbenutzern erteilt, selbst wenn diese nicht erfolgreich von der Autorisiererfunktion authentifiziert wurden. In diesem Fall müssen Sie die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy ausgewählt haben.
- Nur Authentifizierung: Zugriff wird nur Endbenutzern erteilt, die von der Autorisiererfunktion erfolgreich authentifiziert wurden. In diesem Fall zeigt die Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy keine Wirkung.
- Zulässiger Geltungsbereich: Wenn Sie Beliebig als Autorisierungstyp ausgewählt haben, geben Sie eine kommagetrennte Liste mit mindestens einer Zeichenfolge ein, die den von der Autorisiererfunktion zurückgegebenen Zugriffsgeltungsbereichen entspricht. Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion einen der angegebenen Zugriffsgeltungsbereiche zurückgibt. Beispiel:
read:hello
Hinweis
Wenn Sie keine Autorisierungs-Policy für eine bestimmte Route angeben, wird der Zugriff basierend auf der Annahme erteilt, dass eine solche Policy vorhanden ist, und der Autorisierungstyp wird auf Nur Authentifizierung gesetzt. Anders ausgedrückt: Ungeachtet der Einstellung der Option Anonymen Zugriff aktivieren der Authentifizierungs-Policy können:
- nur authentifizierte Endbenutzer auf die Route zugreifen
- alle authentifizierten Endbenutzer auf die Route zugreifen, und zwar unabhängig von den Zugriffsgeltungsbereichen, die von der Autorisiererfunktion zurückgegeben werden
- anonyme Endbenutzer nicht auf die Route zugreifen
-
- Wählen Sie Weiter aus, um die Details zu prüfen, die Sie für das API-Deployment eingegeben haben.
- Wählen Sie Erstellen oder Änderungen speichern aus, um das API-Deployment zu erstellen oder zu aktualisieren.
- (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).
JSON-Datei bearbeiten, um Anforderungs-Policys für Single-Argument-Authentifizierung und -Autorisierung hinzuzufügen
So fügen Sie Authentifizierungs- und Autorisierungsanforderungs-Policys für Zugriffstoken mit einem Argument zu einer API-Deployment-Spezifikation in einer JSON-Datei hinzu:
-
Bearbeiten Sie mit Ihrem bevorzugten JSON-Editor die vorhandene API-Deployment-Spezifikation, der Sie eine Authentifizierungs- und Autorisierungsfunktionalität hinzufügen möchten, oder erstellen Sie eine neue API-Deployment-Spezifikation (siehe API-Deployment-Spezifikation erstellen).
Die API-Deployment-Spezifikation beinhaltet zumindest einen
routes
-Abschnitt, der Folgendes enthält:- Einen Pfad. Beispiel:
/hello
- Mindestens eine Methode. Beispiel:
GET
- Eine Definition eines Backends. Beispiel: Eine URL oder die OCID einer Funktion in OCI Functions.
Beispiel: Die folgende Basisspezifikation für das API-Deployment definiert eine einfache serverlose Hello World-Funktion in OCI Functions als einzelnes Backend:
{ "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
- Einen Pfad. Beispiel:
-
Fügen Sie eine
authentication
-Anforderungs-Policy hinzu, die für alle Routen in der API-Deployment-Spezifikation gilt:-
Fügen Sie, falls noch nicht vorhanden, einen
requestPolicies
-Abschnitt vor demroutes
-Abschnitt ein. Beispiel:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
Fügen Sie die folgende
authentication
-Policy zum neuenrequestPolicies
-Abschnitt hinzu.{ "requestPolicies": { "authentication": { "type": "<type-value>", "isAnonymousAccessAllowed": <true|false>, "functionId": "<function-ocid>", <"tokenHeader"|"tokenQueryParam">: <"<token-header-name>"|"<token-query-param-name>"> } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
Dabei gilt:
-
<type-value>
ist der Authentifizierungstyp. Um eine Autorisiererfunktion für die Authentifizierung zu verwenden, geben SieCUSTOM_AUTHENTICATION
an. "isAnonymousAccessAllowed": <true|false>
gibt optional an, ob nicht authentifizierte (d.h. anonyme) Endbenutzer auf Routen in der API-Deployment-Spezifikation zugreifen können. Wenn Sie den Zugriff anonymer Endbenutzer auf Routen nie zulassen möchten, setzen Sie diese Eigenschaft auffalse
. Wenn Sie diese Eigenschaft nicht in dieauthentication
-Policy aufnehmen, wird standardmäßigfalse
verwendet. Hinweis: Wenn Sie diese Eigenschaft aufnehmen und auftrue
setzen, müssen Sie auch explizit jede Route angeben, auf die anonym zugegriffen werden kann. Setzen Sie dazu in derauthorization
-Policy jeder einzelnen Route dietype
-Eigenschaft auf"ANONYMOUS"
.-
<function-ocid>
ist die OCID der Autorizer-Funktion, die in OCI Functions bereitgestellt wurde. <"tokenHeader"|"tokenQueryParam">: <"<token-header-name>"|"<token-query-param-name>">
gibt an, ob es sich um einen Anforderungsheader handelt, der das Zugriffstoken enthält (wenn ja, wird der Name des Headers angegeben), oder ob es sich um einen Abfrageparameter handelt, der das Zugriffstoken enthält (wenn ja, wird der Name des Abfrageparameters angegeben). Beachten Sie, dass Sie entweder"tokenHeader": "<token-header-name>"
oder"tokenQueryParam": "<token-query-param-name>">
angeben können, aber nicht beides.
Beispiel: Die folgende
authentication
-Policy gibt eine OCI-Funktion an, mit der das Zugriffstoken im Autorisierungsanforderungsheader validiert wird:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", "isAnonymousAccessAllowed": false, "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq", "tokenHeader": "Authorization" } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }
-
-
-
Fügen Sie eine
authorization
-Anforderungs-Policy für jede Route in der API-Deployment-Spezifikation hinzu:-
Fügen Sie, falls noch nicht vorhanden, einen
requestPolicies
-Abschnitt nach dembackend
-Abschnitt der ersten Route ein. Beispiel:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", "isAnonymousAccessAllowed": false, "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq", "tokenHeader": "Authorization" } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": {} } ] }
-
Fügen Sie die folgende
authorization
-Policy zumrequestPolicies
-Abschnitt hinzu:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", "isAnonymousAccessAllowed": false, "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq", "tokenHeader": "Authorization" } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">, "allowedScope": [ "<scope>" ] } } } ] }
Dabei gilt:
-
"type": <"AUTHENTICATION_ONLY"|"ANY_OF"|"ANONYMOUS">
gibt an, wie Zugriff auf die Route erteilt werden soll:"AUTHENTICATION_ONLY"
: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden. In diesem Fall zeigt die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation keine Wirkung."ANY_OF"
: Zugriff wird nur Endbenutzern erteilt, die erfolgreich authentifiziert wurden, sofern die Autorisiererfunktion auch einen der Zugriffsgeltungsbereiche zurückgegeben hat, die Sie in der EigenschaftallowedScope
angegeben haben. In diesem Fall zeigt die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation keine Wirkung."ANONYMOUS"
: Zugriff wird allen Endbenutzern erteilt, selbst wenn diese nicht erfolgreich authentifiziert wurden. In diesem Fall müssen Sie die"isAnonymousAccessAllowed"
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation explizit auftrue
setzen.
-
"allowedScope": [ "<scope>" ]
ist eine kommagetrennte Liste mit mindestens einer Zeichenfolge, die den von der Autorisiererfunktion zurückgegebenen Zugriffsbereichen entspricht. In diesem Fall müssen Sie dietype
-Eigenschaft auf"ANY_OF"
setzen (die"allowedScope"
-Eigenschaft wird ignoriert, wenn dietype
-Eigenschaft auf"AUTHENTICATION_ONLY"
oder"ANONYMOUS"
gesetzt wurde). Wenn Sie mehr als einen Geltungsbereich angeben, wird der Zugriff auf die Route erteilt, sobald einer der von Ihnen angegebenen Geltungsbereiche von der Autorisiererfunktion zurückgegeben wird.
Beispiel: Die folgende Anforderungs-Policy definiert eine
/hello
-Route, die nur authentifizierten Endbenutzern mit dem Geltungsbereichread:hello
Zugriff gewährt:{ "requestPolicies": { "authentication": { "type": "CUSTOM_AUTHENTICATION", "isAnonymousAccessAllowed": false, "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq", "tokenHeader": "Authorization" } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" }, "requestPolicies": { "authorization": { "type": "ANY_OF", "allowedScope": [ "read:hello" ] } } } ] }
-
- Fügen Sie eine
authorization
-Anforderungs-Policy für alle restlichen Routen in der API-Deployment-Spezifikation hinzu.
Hinweis
Wenn Sie keine
authorization
-Policy für eine bestimmte Route angeben, wird der Zugriff basierend auf der Annahme erteilt, dass eine solche Policy vorhanden ist, und dietype
-Eigenschaft wird auf"AUTHENTICATION_ONLY"
gesetzt. Anders ausgedrückt: Ungeachtet der Einstellung derisAnonymousAccessAllowed
-Eigenschaft in derauthentication
-Policy der API-Deployment-Spezifikation können:- nur authentifizierte Endbenutzer auf die Route zugreifen
- alle authentifizierten Endbenutzer auf die Route zugreifen, und zwar unabhängig von den Zugriffsgeltungsbereichen, die von der Autorisiererfunktion zurückgegeben werden
- anonyme Endbenutzer nicht auf die Route zugreifen
-
- Speichern Sie die JSON-Datei, die die API-Deployment-Spezifikation enthält.
-
Verwenden Sie die API-Deployment-Spezifikation, wenn Sie ein API-Deployment wie folgt erstellen oder aktualisieren:
- Durch Angabe der JSON-Datei in der Konsole bei Auswahl der Option Vorhandene API hochladen
- Durch Angabe der JSON-Datei in einer Anforderung an die REST-API von API-Gateway
Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.
- (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).