Mehrere Authentifizierungsserver zu demselben API-Deployment hinzufügen
Eine häufige Anforderung besteht darin, Anforderungen, die an dasselbe API-Deployment gesendet werden, auf unterschiedliche Weise zu authentifizieren. Beispiel: Sie möchten, dass eine eingehende Anforderung von einem API-Client zur Authentifizierung an eine Autorisiererfunktion gesendet wird. Möglicherweise soll ein JSON Web Token (JWT), das in einer eingehenden Anforderung von einem anderen API-Client enthalten ist, mit einem Identitätsprovider validiert werden. Der Einfachheit halber werden diese verschiedenen Arten von Authentifizierung und Autorisierung (Autorisiererfunktion, JWT-Authentifizierung) als "Authentifizierungsserver" bezeichnet.
- Autorizer-Funktionen (weitere Informationen zu Autorizer-Funktionen finden Sie unter Token an Autorizer-Funktionen zum Hinzufügen von Authentifizierung und Autorisierung zu API-Deployments übergeben)
- JSON-Web-Token (JWTs) mit einem Identitätsprovider validiert (siehe Token zum Hinzufügen von Authentifizierung und Autorisierung zu API-Deployments validieren).
Wenn Sie mehrere Authentifizierungsserver für dasselbe API-Deployment definieren, erstellen Sie Regeln, damit das API-Gateway basierend auf einem Element in der ursprünglichen Anforderung dynamisch auswählen kann, welcher Authentifizierungsserver zur Authentifizierung von Anforderungen verwendet werden soll.
Damit das API-Gateway den richtigen Authentifizierungsserver dynamisch auswählen kann, verwenden Sie die folgenden Kontextvariablen, um Elemente der Anforderung zu erfassen:
request.auth[<key>]
, wobei<key>
der Name eines Claims ist, der in einem JWT-Token enthalten ist.request.headers[<key>]
, wobei<key>
der Name eines Headers ist, der in der Anforderung an die API enthalten ist.request.host
als Name des Hosts, an den die ursprüngliche Anforderung gesendet wurde.request.path[<key>]
, wobei<key>
der Name eines Pfadparameters ist, der in der API-Deployment-Spezifikation definiert ist.request.query[<key>]
, wobei<key>
der Name eines Abfrageparameters ist, der in der Anforderung an die API enthalten ist.request.subdomain[<key>]
, wobei<key>
der nachgestellte Teil des Hostnamens ist, der beim Erfassen des führenden Teils des Hostnamens, an den die ursprüngliche Anforderung gesendet wurde, ignoriert werden soll.
Wenn eine Kontextvariable mehrere Werte aufweist, wird bei der Auswahl des Authentifizierungsservers nur der erste Wert verwendet. Weitere Informationen zu kontextabhängigen Variablen finden Sie unter Kontextabhängige Variablen zu Policys und HTTP-Backend-Definitionen hinzufügen.
Sie können mehrere Authentifizierungsserver für dasselbe API-Deployment in einer API-Deployment-Spezifikation einrichten, indem Sie:
- Konsole verwenden.
- Eine JSON-Datei bearbeiten.
Hinweise zum Abgleich von Authentifizierungsserverregeln
Wenn Sie die Regeln erstellen, um zu bestimmen, welcher Authentifizierungsserver verwendet werden soll, können Sie angeben, wie eng der Kontextvariablenwert mit einem bestimmten Wert übereinstimmen muss, damit die Anforderung an einen bestimmten Authentifizierungsserver weitergeleitet wird. Sie können eine genaue Übereinstimmung oder einen Wert angeben, der mit einem Platzhalter beginnt oder mit diesem endet. Das API-Gateway wertet die Regeln in der von Ihnen angegebenen Reihenfolge aus (genau übereinstimmende Regeln zuerst, gefolgt von Platzhalterregeln) und verwendet die erste Übereinstimmungsregel. Sie können auch eine Standardregel angeben, die verwendet werden soll, wenn der Wert der Kontextvariablen nicht mit den Regeln des Authentifizierungsservers übereinstimmt. Wenn keine Regel als Standardwert angegeben ist und der Kontextvariablenwert in einer eingehenden Anforderung mit keinen Authentifizierungsserverregeln übereinstimmt, gibt die Anforderung einen Fehler zurück. Die Prioritätsreihenfolge zur Bestimmung der zu verwendenden Authentifizierungsserverregel (und damit des zu verwendenden Authentifizierungsservers) kann wie folgt zusammengefasst werden:
- Wenn der Wert der Kontextvariablen genau mit dem Wert einer Regel übereinstimmt, verwenden Sie diese Regel.
- Wenn der Wert der Kontextvariablen mit dem Wert einer Regel übereinstimmt, die mit einem Platzhalter beginnt oder endet, verwenden Sie die erste Regel, die einen übereinstimmenden Platzhalter enthält.
- Andernfalls verwenden Sie diese Regel, wenn eine Regel als Standardregel angegeben ist.
- Andernfalls geben Sie eine
401 Unauthorized
-Fehlerantwort zurück.
Mehrere Authentifizierungsserver mit der Konsole zu demselben API-Deployment hinzufügen
So fügen Sie einer API-Deployment-Spezifikation mit der Konsole mehrere Authentifizierungsserver für dasselbe API-Deployment 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 Multi-Authentifizierung aus, um anzugeben, dass Authentifizierungsanforderungen gemäß der von Ihnen eingegebenen Kontextvariable und Regeln an verschiedene Authentifizierungsserver weitergeleitet werden sollen:
- Wählen Sie in der Liste Selektor die Kontexttabelle (mit der Kontextvariablen), die beim Bestimmen des Authentifizierungsservers verwendet werden soll, an den die Authentifizierungsanforderung gesendet werden soll:
- Auth: Verwenden Sie den Wert eines Claims, der in einem JWT enthalten ist (und in der Kontexttabelle
request.auth
gespeichert ist), um den Authentifizierungsserver zu bestimmen. Wenn Sie Auth auswählen, müssen Sie Authentifizierungsserver des Typs JSON Web Token (JWT) für alle Authentifizierungsserverregeln im API-Deployment angeben. Wenn Sie Auth aus der Liste Selektor auswählen, beachten Sie auch, dass der Speicherort der JWTs für alle Authentifizierungsserver des JSON Web Token (JWT) identisch sein muss (entweder derselbe Anforderungsheader und das gleiche Autorisierungsschema oder derselbe Abfrageparameter). - Header: Verwenden Sie den Wert eines Headers aus der ursprünglichen Anforderung (und in der Kontexttabelle
request.headers
gespeichert), um den Authentifizierungsserver zu bestimmen. - Host: Verwenden Sie den Namen des Hosts, an den die ursprüngliche Anforderung gesendet wurde (aus dem Hostfeld des Hostheaders in der Anforderung extrahiert und in der Kontexttabelle
request.host
gespeichert), um den Authentifizierungsserver zu bestimmen. - Pfad: Verwenden Sie einen Pfadparameter aus der ursprünglichen Anforderung (und in der Kontexttabelle
request.path
gespeichert), um den Authentifizierungsserver zu bestimmen. - Abfrageparameter: Verwenden Sie den Wert eines Abfrageparameters aus der ursprünglichen Anforderung (und in der Kontexttabelle
request.query
gespeichert), um den Authentifizierungsserver zu bestimmen. - Subdomain: Verwenden Sie den führenden Teil des Hostnamens, an den die ursprüngliche Anforderung gesendet wurde (nur diesen Teil des Hostnamens, der nicht als Schlüssel angegeben und in der Kontexttabelle
request.subdomain
gespeichert ist), um den Authentifizierungsserver zu bestimmen. Beachten Sie, dass der Schlüssel der nachgestellte Teil des Hostnamens ist, der nicht verwendet werden soll.
- Auth: Verwenden Sie den Wert eines Claims, der in einem JWT enthalten ist (und in der Kontexttabelle
- Geben Sie je nach ausgewählter Kontexttabelle den Namen des Schlüssels ein, der bei der Bestimmung des Authentifizierungsservers verwendet werden soll, an den die Authentifizierungsanforderung gesendet werden soll.
- Wählen Sie in der Liste Selektor die Kontexttabelle (mit der Kontextvariablen), die beim Bestimmen des Authentifizierungsservers verwendet werden soll, an den die Authentifizierungsanforderung gesendet werden soll:
- Wählen Sie Policy definieren aus, um eine Regel für die Kontextvariable einzugeben, die bei Erfüllung die Authentifizierungsanforderung an den von Ihnen definierten Authentifizierungsserver weiterleitet.
- Geben Sie Details für die Authentifizierungsserverregel wie folgt ein:
- Name: Geben Sie einen Namen für die Authentifizierungsserverregel ein. Verwenden Sie den Namen, den Sie eingeben, um den Authentifizierungsserver beim Verweisen auf Logs und Metriken zu identifizieren. Der Name muss für alle Authentifizierungsserverregeln eindeutig sein, die für das API-Deployment definiert sind.
- Übereinstimmungstyp: Geben Sie an, wie eng der Wert der Kontextvariablen mit einem Wert übereinstimmen muss, den Sie eingeben, damit die Anforderung an diesen Authentifizierungsserver weitergeleitet wird. Wählen Sie Beliebig von aus, wenn die Kontextvariable genau mit dem Wert im Feld Werte übereinstimmen muss. Wählen Sie Platzhalter, wenn die Kontextvariable mit einem Wert im Feld Ausdruck übereinstimmen muss, der Platzhalter enthält. Bei der Wertübereinstimmung wird die Groß-/Kleinschreibung nicht beachtet, wenn Sie Beliebig von auswählen. Bei der Auswahl von Platzhalter wird die Groß-/Kleinschreibung beachtet.
- Werte: (Wird angezeigt, wenn Sie im Feld Übereinstimmungstyp die Option Beliebig von ausgewählt haben.) Geben Sie einen Wert (oder mehrere Werte in einer durch Komma getrennten Liste) an, mit dem die Kontextvariable genau übereinstimmen muss. Beachten Sie, dass bei der Übereinstimmung die Groß-/Kleinschreibung nicht beachtet wird, wenn Sie Beliebig von ausgewählt haben. Beachten Sie außerdem, dass Werte in einer einzelnen Authentifizierungsserverregel und in allen für das API-Deployment definierten Authentifizierungsserverregeln eindeutig sein müssen.
- Ausdruck: (Wird angezeigt, wenn Sie im Feld Übereinstimmungstyp die Option Platzhalter ausgewählt haben) Geben Sie einen Wert an, der mit einem Platzhalter beginnt oder mit diesem endet, mit dem die Kontextvariable übereinstimmen muss. Verwenden Sie den Platzhalter
*
(Sternchen), um null oder mehr Zeichen anzugeben, und/oder den Platzhalter+
(Pluszeichen), um ein oder mehrere Zeichen anzugeben. Beachten Sie, dass bei der Übereinstimmung die Groß-/Kleinschreibung beachtet wird, wenn Sie Platzhalter ausgewählt haben. Beachten Sie, dass Sie nicht mehr als einen Platzhalter in einen Wert aufnehmen können und dass Sie keinen Platzhalter in der Mitte eines Wertes einfügen können. - Standardwert festlegen: Geben Sie an, ob der für diese Regel definierte Authentifizierungsserver verwendet werden soll, wenn keine anderen Authentifizierungsserverregeln mit dem Kontextvariablenwert übereinstimmen. Sie können nur eine Authentifizierungsserverregel als Standardregel für ein API-Deployment angeben. Wenn keine Regel als Standard markiert ist und der Wert der Kontextvariablen in einer eingehenden Anforderung mit keinen Authentifizierungsserverregeln übereinstimmt, die für ein API-Deployment definiert sind, gibt die Anforderung eine
401 Unauthorized
-Fehlerantwort zurück.
-
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.
- Geben Sie die Details für den Authentifizierungsserver wie folgt ein:
- Wählen Sie im Feld Authentifizierungstyp die Option JSON Web Token (JWT) oder Autorisiererfunktion als Authentifizierungsserver aus, an den die Authentifizierungsanforderung weitergeleitet werden soll, wenn die eingegebene Regel erfüllt ist.
Wenn Sie Auth aus der Liste Selektor ausgewählt haben, müssen Sie JSON Web Token (JWT) als Authentifizierungsservertyp auswählen. Wenn Sie Auth aus der Liste Selektor ausgewählt haben, beachten Sie auch, dass der Speicherort der JWTs für alle Authentifizierungsserver des JSON-Web-Tokens (JWT) identisch sein muss (entweder derselbe Anforderungsheader und das Autorisierungsschema oder derselbe Abfrageparameter).
- Geben Sie Details für den ausgewählten Authentifizierungsserver ein. Die einzugebenden Details hängen vom gewählten Authentifizierungsservertyp ab:
- Informationen zu einem Authentifizierungsserver für JSON Web Token (JWT) finden Sie unter Tokenauthentifizierungs- und Autorisierungsanforderungs-Policys mit der Konsole hinzufügen.
- Geben Sie für einen Authentifizierungsserver der Autorisiererfunktion den Namen der Autorisiererfunktion und die Anwendung in OCI Functions an, die sie enthält. Wählen Sie dann entweder Autorisiererfunktion für mehrere Argumente oder Autorisiererfunktion für ein einzelnes Argument aus. Weitere Informationen finden Sie unter:
- Wählen Sie Definieren aus, um den Authentifizierungsserver und die zugehörige Regel zu erstellen.
- Wählen Sie im Feld Authentifizierungstyp die Option JSON Web Token (JWT) oder Autorisiererfunktion als Authentifizierungsserver aus, an den die Authentifizierungsanforderung weitergeleitet werden soll, wenn die eingegebene Regel erfüllt ist.
- Wählen Sie optional erneut Policy definieren aus, um zusätzliche Authentifizierungsserver und zugehörige Regeln zu definieren.
- Wählen Sie Weiter aus, um Details zu einzelnen Routen im API-Deployment auf der Seite Routen einzugeben.
- Wählen Sie Änderungen speichern 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 mehrere Authentifizierungsserver zu demselben API-Deployment hinzuzufügen
So fügen Sie einer API-Deployment-Spezifikation in einer JSON-Datei mehrere Authentifizierungsserver für dasselbe API-Deployment hinzu:
-
Erstellen Sie mit Ihrem bevorzugten JSON-Editor eine neue API-Deployment-Spezifikation (siehe API-Deployment-Spezifikation erstellen) in folgendem Format:
{ "requestPolicies": { "dynamicAuthentication": { "selectionSource": { "selector": "<context-table-key>", "type": "SINGLE" }, "authenticationServers": [ { "key": { "type": "<ANY_OF|WILDCARD>", "values": ["<context-variable-value>"], "isDefault": "<true|false>", "name": "<rule-name>" }, "authenticationServerDetail": { "type": "<authentication-server-type>", "<auth-server-attribute-name>": "<auth-server-attribute-value>", ... "<auth-server-attribute-name>": "<auth-server-attribute-value>" } } ] } }, "routes": [] }
Dabei gilt:
"dynamicAuthentication"
gibt an, dass das API-Gateway basierend auf einem Element in der Anforderung dynamisch auswählen soll, welcher Authentifizierungsserver zur Authentifizierung von Anforderungen verwendet werden soll."selector": "<context-table-key>"
gibt die Kontexttabelle (und gegebenenfalls den Schlüssel) an, aus der der Kontextvariablenwert abgerufen werden soll, der den Authentifizierungsserver bestimmt, an den Authentifizierungsanforderungen gesendet werden sollen, wie folgt:request.auth[<key>]
Verwenden Sie den Wert eines Claims, der in einem JSON Web Token (JWT) enthalten ist, um den Authentifizierungsserver zu bestimmen.<key>
ist der Name des Claims. Beispiel:request.auth[tenant]
. Wenn Sierequest.auth[<key>]
angeben, müssen Sie Authentifizierungsserver vom TypJWT_AUTHENTICATION
für alle Authentifizierungsserverregeln im API-Deployment angeben. Wenn Sierequest.auth[<key>]
angeben, müssen Sie auch beachten, dass der Speicherort der JWTs für alle Authentifizierungsserver (entweder denselben Anforderungsheader und dasselbe Autorisierungsschema oder denselben Abfrageparameter) identisch sein muss.request.headers[<key>]
Verwenden Sie den Wert eines Headers aus der ursprünglichen Anforderung, um den Authentifizierungsserver zu bestimmen.<key>
ist der Headername. Beispiel:request.headers[Accept]
request.host
Verwenden Sie den Namen des Hosts, an den die ursprüngliche Anforderung gesendet wurde (aus dem Hostfeld des Hostheaders in der Anforderung extrahiert), um den Authentifizierungsserver zu bestimmen.request.path[<key>]
Verwenden Sie einen Pfadparameter aus der ursprünglichen Anforderung, um den Authentifizierungsserver zu bestimmen.<key>
ist der Pfadparametername. Beispiel:request.path[region]
request.query[<key>]
Verwenden Sie den Wert eines Abfrageparameters aus der ursprünglichen Anforderung, um den Authentifizierungsserver zu bestimmen.<key>
ist der Abfrageparametername. Beispiel:request.query[state]
request.subdomain[<key>]
Verwenden Sie den führenden Teil des Hostnamens, an den die ursprüngliche Anforderung gesendet wurde (nur den Teil des Hostnamens, der nicht als Schlüssel angegeben ist), um den Authentifizierungsserver zu bestimmen. Beachten Sie, dass<key>
der nachgestellte Teil des Hostnamens ist, der nicht verwendet werden soll. Beispiel:request.subdomain[example.com]
"type": "SINGLE"
gibt an, dass Sie eine einzelne Kontextvariable zur dynamischen Auswahl des Authentifizierungsservers verwenden möchten."key": {...}
gibt die Regel an, die erfüllt werden muss, um eine Anforderung an den mit"authenticationServerDetail": {…}
angegebenen Authentifizierungsserver zu senden."type": "<ANY_OF|WILDCARD>"
gibt an, wie eng der Wert der mit<context-table-key>
identifizierten Kontextvariablen mit dem Wert übereinstimmen muss, den Sie für<context-variable-value>
eingeben, damit die Anforderung an den mit"authenticationServerDetail": {…}
angegebenen Authentifizierungsserver gesendet wird. Geben SieANY_OF
an, wenn der Wert der mit<context-table-key>
identifizierten Kontextvariablen genau mit dem Wert übereinstimmen muss, den Sie für<context-variable-value>
angeben. Geben SieWILDCARD
an, wenn der Wert der mit<context-table-key>
identifizierten Kontextvariablen mit einem Wert übereinstimmen muss, der Platzhalter enthält, die Sie für<context-variable-value>
angeben. Bei der Wertübereinstimmung wird die Groß-/Kleinschreibung nicht beachtet, wenn SieANY_OF
angeben. Wenn SieWILDCARD
angeben, wird die Groß-/Kleinschreibung beachtet.<context-variable-value>
ist ein Wert, der möglicherweise mit dem Wert der mit<context-table-key>
identifizierten Kontextvariable übereinstimmt. Sie können mehrere"<context-variable-value>"
-Einträge in das Arrayvalues:[...]
aufnehmen, getrennt durch Kommas. Die Anforderung wird wie folgt an den von"authenticationServerDetail": {…}
angegebenen Authentifizierungsserver gesendet, wenn die Werte übereinstimmen:- Wenn Sie
"type": "ANY_OF"
angegeben haben, müssen die Werte genau übereinstimmen. Beachten Sie, dass Werte innerhalb einer einzelnen Authentifizierungsserverregel und in allen Authentifizierungsserverregeln, die für ein API-Deployment definiert sind, eindeutig sein müssen. Bei der Wertübereinstimmung wird die Groß-/Kleinschreibung nicht beachtet, wenn SieANY_OF
angegeben haben. - Wenn Sie
"type": "WILDCARD"
angegeben haben, können Sie einen Wert für<context-variable-value>
angeben, der mit einem Platzhalter beginnt oder mit diesem endet. Verwenden Sie den Platzhalter*
(Sternchen), um Null oder mehr Zeichen anzugeben, und/oder den Platzhalter+
(Pluszeichen), um ein oder mehrere Zeichen anzugeben. Beachten Sie, dass Sie nicht mehr als einen Platzhalter in einen Wert aufnehmen können und keinen Platzhalter in die Mitte eines Wertes aufnehmen können. Beim Wertabgleich wird die Groß-/Kleinschreibung beachtet, wenn SieWILDCARD
angegeben haben.
"selector": "request.headers[Accept]"
"type": "ANY_OF"
"values": ["application/xml"]
- Wenn Sie
"isDefault": "<true|false>"
ist ein optionaler boolescher Wert (entwedertrue
oderfalse
), der angibt, ob der Authentifizierungsserver für diese Regel verwendet werden soll, wenn keine anderen Authentifizierungsserverregeln mit dem Kontextvariablenwert übereinstimmen. Wenn keine Angabe gemacht wird, wird"isDefault": "false"
angenommen. Sie können nur eine Authentifizierungsserverregel als Standard für ein API-Deployment angeben. Wenn keine Regel als Standardwert markiert ist und der Kontextvariablenwert in einer eingehenden Anforderung mit keinen Authentifizierungsserverregeln übereinstimmt, die für ein API-Deployment definiert sind, gibt die Anforderung eine401 Unauthorized
-Fehlerantwort zurück."name": "<rule-name>"
gibt einen Namen für die Regel an. Verwenden Sie diesen Namen, um den Authentifizierungsserver zu identifizieren, wenn Sie auf Logs und Metriken verweisen. Der Name muss für alle Authentifizierungsserverregeln eindeutig sein, die für das API-Deployment definiert sind."type": "<authentication-server-type>"
gibt den Typ des Authentifizierungsservers an. Gültige Werte sindJWT_AUTHENTICATION
undCUSTOM_AUTHENTICATION
. Wenn Sierequest.auth[<key>]
angegeben haben, müssen Sie Authentifizierungsserver vom TypJWT_AUTHENTICATION
für alle Authentifizierungsserverregeln im API-Deployment angeben. Wenn Sierequest.auth[<key>]
angegeben haben, müssen Sie auch beachten, dass der Speicherort der JWTs für alle Authentifizierungsserver (entweder denselben Anforderungsheader und dasselbe Autorisierungsschema oder denselben Abfrageparameter) identisch sein muss."<auth-server-attribute-name>": "<auth-server-attribute-value>"
sind Attribute und Attributwerte für den angegebenen Authentifizierungsservertyp. Die Attribute und Attributwerte, die eingegeben werden sollen, hängen vom Typ des angegebenen Authentifizierungsservers ab:- Informationen zu einem
JWT_AUTHENTICATION
-Authentifizierungsserver finden Sie unter JSON-Datei zum Hinzufügen von Policys für Tokenauthentifizierung und Autorisierungsanforderungen bearbeiten - Informationen zu einem
CUSTOM_AUTHENTICATION
-Authentifizierungsserver finden Sie unter:
- Informationen zu einem
Beispiel: Die folgende API-Deployment-Spezifikation umfasst die Auswahl des dynamischen Authentifizierungsservers, der Authentifizierungsanforderungen basierend auf dem Wert des in der Anforderung übergebenen Abfrageparameters
vehicle-type
verarbeitet. Eine ausführlichere Erläuterung dieses Beispiels finden Sie unter Beispiel 1: Wählen Sie JWT oder eine serverlose Funktion als Authentifizierungsserver mit einem Abfrageparameter (einschließlich Platzhalterauswahl und Standardwert).{ "requestPolicies": { "dynamicAuthentication": { "selectionSource": { "selector": "request.query[vehicle-type]", "type": "SINGLE" }, "authenticationServers": [ { "key": { "type": "ANY_OF", "values": ["car"], "isDefault": "true", "name": "authServer1" }, "authenticationServerDetail": { "type": "JWT_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": true, "issuers": ["https://recommend-app.eu.auth0.com/"], "audiences": ["api.dev.io"], "maxClockSkewInSeconds": 0, "verifyClaims": [ { "key": "gty", "value": ["client-credentials"], "isRequired": true } ], "publicKeys": { "type": "REMOTE_JWKS", "uri": "https://recommend-app.eu.auth0.com/.well-known/jwks.json", "maxCacheDurationInHours": 1 } } }, { "key": { "type": "WILDCARD", "expression": "mini*", "name": "authServer2" }, "authenticationServerDetail": { "type": "CUSTOM_AUTHENTICATION", "functionId": "ocid1.fnfunc.oc1.iad.aaaaaaaaac______dfa", "isAnonymousAccessAllowed": true } } ] } }, "routes": [] }
- 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).
Beispiele
Beispiel 1: Wählen Sie JWT oder serverlose Funktion als Authentifizierungsserver mit einem Abfrageparameter (einschließlich Platzhalterauswahl und Default)
In diesem Beispiel bestimmt das API-Gateway den Authentifizierungsserver, an den die Authentifizierungsanforderung gesendet werden soll, basierend auf dem Wert des Abfrageparameters vehicle-type
, der in der Anforderung übergeben wird. Wenn der Abfrageparameter vehicle-type
den Wert car
aufweist, wird das JWT im Autorisierungsheader der Anforderung validiert, indem öffentliche Verifizierungsschlüssel vom Identitätsprovider https://recommend-app.eu.auth0.com
abgerufen werden. Wenn der Abfrageparameter vehicle-type
einen Wert aufweist, der mit mini
beginnt, wird eine Authentifizierungsanforderung zur Verarbeitung an eine serverlose Funktion in OCI Functions gesendet. Wenn der Abfrageparameterwert vehicle-type
weder car
noch mini*
ist, geht das API-Gateway standardmäßig davon aus, dass im Autorisierungsheader der Anforderung ein JWT vorhanden ist, und versucht, ihn zu validieren, indem öffentliche Verifizierungsschlüssel vom Identitätsprovider https://recommend-app.eu.auth0.com
abgerufen werden:
{
"requestPolicies": {
"dynamicAuthentication": {
"selectionSource": {
"selector": "request.query[vehicle-type]",
"type": "SINGLE"
},
"authenticationServers": [
{
"key": {
"type": "ANY_OF",
"values": ["car"],
"isDefault": "true",
"name": "authServer1"
},
"authenticationServerDetail": {
"type": "JWT_AUTHENTICATION",
"tokenHeader": "Authorization",
"tokenAuthScheme": "Bearer",
"isAnonymousAccessAllowed": true,
"issuers": ["https://recommend-app.eu.auth0.com/"],
"audiences": ["api.dev.io"],
"maxClockSkewInSeconds": 0,
"verifyClaims": [
{
"key": "gty",
"value": ["client-credentials"],
"isRequired": true
}
],
"publicKeys": {
"type": "REMOTE_JWKS",
"uri": "https://recommend-app.eu.auth0.com/.well-known/jwks.json",
"maxCacheDurationInHours": 1
}
}
},
{
"key": {
"type": "WILDCARD",
"expression": "mini*",
"name": "authServer2"
},
"authenticationServerDetail": {
"type": "CUSTOM_AUTHENTICATION",
"functionId": "ocid1.fnfunc.oc1.iad.aaaaaaaaac______dfa",
"isAnonymousAccessAllowed": true
}
}
]
}
},
"routes": []
}
Beispiel 2: JWT-Authentifizierungsserver mit Claims aus JWT-Token auswählen
In diesem Beispiel bestimmt das API-Gateway den Authentifizierungsserver, an den die Authentifizierungsanforderung gesendet werden soll, basierend auf dem tenant
-Claim in einem JWT-Token, das im Autorisierungsheader der Anforderung übergeben wird. Zwei Beispiel-JWT-Token folgen der API-Deployment-Spezifikation:
{
"pathPrefix": "/deployment-path",
"specification": {
"requestPolicies": {
"dynamicAuthentication": {
"selectionSource": {
"selector": "request.auth[tenant]",
"type": "SINGLE"
},
"authenticationServers": [
{
"key": {
"values": ["cars"],
"type": "ANY_OF",
"name": "authServer1"
},
"authenticationServerDetail": {
"type": "JWT_AUTHENTICATION",
"tokenHeader": "Authorization",
"tokenAuthScheme": "Bearer",
"isAnonymousAccessAllowed": true,
"issuers": ["https://tenant-2.us.auth0.com/"],
"audiences": ["https://tenant-2"],
"maxClockSkewInSeconds": 0,
"verifyClaims": [
{
"key": "gty",
"value": ["client-credentials"],
"isRequired": true
}
],
"publicKeys": {
"type": "REMOTE_JWKS",
"uri": "https://car.us.auth0.com/.well-known/jwks.json",
"maxCacheDurationInHours": 1
}
}
},
{
"key": {
"values": ["trucks"],
"type": "ANY_OF",
"name": "authServer2"
},
"authenticationServerDetail": {
"type": "JWT_AUTHENTICATION",
"tokenHeader": "Authorization",
"tokenAuthScheme": "Bearer",
"isAnonymousAccessAllowed": true,
"issuers": ["https://tenant-2.us.auth0.com/"],
"audiences": ["https://tenant-2"],
"maxClockSkewInSeconds": 0,
"verifyClaims": [
{
"key": "gty",
"value": ["client-credentials"],
"isRequired": true
}
],
"publicKeys": {
"type": "REMOTE_JWKS",
"uri": "https://truck.us.auth0.com/.well-known/jwks.json",
"maxCacheDurationInHours": 1
}
}
}
]
}
}
},
"loggingPolicies": {},
"routes": []
}
Bei der Authentifizierung einer Anforderung mit dem folgenden JWT-Token im Autorisierungsheader ruft das API-Gateway das JSON Web Key Set (JWKS) ab, um die Signatur aus https://car.us.auth0.com/.well-known/jwks.json
zu prüfen.
{
"iss": "https://tenant-2.us.auth0.com/",
"sub": "aPz45Gbdfy6dgh30sdfER6cgjkhjx8a@clients",
"aud": "https://tenant-2",
"iat": 1641282986,
"exp": 1641369386,
"azp": "aPz45Gbdfy6dgh30sdfER6cgjkhjx8a",
"gty": "client-credentials",
"tenant":"cars"
}
Bei der Authentifizierung einer Anforderung mit dem folgenden JWT-Token im Autorisierungsheader ruft das API-Gateway das JSON Web Key Set (JWKS) ab, um die Signatur aus https://truck.us.auth0.com/.well-known/jwks.json
zu prüfen.
{
"iss": "https://tenant-2.us.auth0.com/",
"sub": "aPz45Gbdfy6dgh30sdfER6cgjkhjx8a@clients",
"aud": "https://tenant-2",
"iat": 1641282986,
"exp": 1641369386,
"azp": "aPz45Gbdfy6dgh30sdfER6cgjkhjx8a",
"gty": "client-credentials",
"tenant":"trucks"
}