JSON-Datei zum Hinzufügen der Tokenauthentifizierungs- und Autorisierungsanforderungs-Policys bearbeiten
Authentifizierungsanforderungs-Policys und Autorisierungsanforderungs-Policys zu einer API-Deployment-Spezifikation in einer JSON-Datei hinzufügen.
-
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 grundlegende API-Deployment-Spezifikation 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 einen
requestPolicies-Abschnitt vor demroutes-Abschnitt ein (falls noch keiner vorhanden ist), um eineauthentication-Anforderungs-Policy zu erstellen, die für alle Routen in der API-Deployment-Spezifikation gilt. Beispiel:{ "requestPolicies": {}, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
Fügen Sie die Anforderungs-Policy
authenticationwie folgt hinzu:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", <"tokenHeader"|"tokenQueryParam">: <"<token-header-name>"|"<token-query-param-name>">, "tokenAuthScheme": "<authentication-scheme>", "isAnonymousAccessAllowed": <true|false>, "maxClockSkewInSeconds": <seconds-difference>, "validationPolicy": {<validation-policy-config>}, } "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] }Dabei gilt:
-
"authentication": {"type": "TOKEN_AUTHENTICATION"...gibt an, dass Sie Token zur Authentifizierung verwenden möchten. -
<"tokenHeader"|"tokenQueryParam">: <"<token-header-name>"|"<token-query-param-name>">gibt an, ob dies ein Anforderungsheader ist, der das Token (wenn ja, wird der Name des Headers angegebenen) enthält, oder ob der Abfrageparameter, der das Token enthält (falls ja, wird der Name des Abfrageparametersangegeben). Beachten Sie, dass Sie entweder"tokenHeader": "<token-header-name>"oder"tokenQueryParam": "<token-query-param-name>">angeben können, aber nicht beides. Beispiel:"tokenHeader": "Authorization" -
<tokenAuthScheme>ist der Name des Authentifizierungsschemas, das verwendet werden soll, wenn das Token in einem Anforderungsheader enthalten ist. Beispiel:"Bearer". -
"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äßigfalseverwendet. Hinweis: Wenn Sie diese Eigenschaft aufnehmen und auftruesetzen, 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". -
maxClockSkewInSeconds: <seconds-difference>gibt optional den maximalen Zeitunterschied zwischen den Systemuhren des Identitätsproviders, der ein JWT ausgestellt hat, und dem API-Gateway an. Der angegebene Wert wird berücksichtigt, wenn das API-Gateway das JWT validiert, um zu bestimmen, ob es noch gültig ist. Verwenden Sie hierzu den Claim "nicht vor" (nbf), falls vorhanden) und den Ablaufclaim (exp) im JWT. Der Mindestwert (und Standardwert) ist0, der Höchstwert ist120. -
"validationPolicy": {<validation-policy-config>}gibt eine Validierungs-Policy zur Validierung von Token an, wie in den folgenden Schritten beschrieben.
-
- Wenn das API-Gateway sowohl JWT-Token als auch Nicht-JWT-Token mit dem Introspektionsendpunkt eines OAuth 2.0-Autorisierungsservers mit Clientzugangsdaten (einschließlich eines aus einem Vault im Vault-Service abgerufenen Client-Secrets) validieren soll, fügen Sie dem leeren Abschnitt
validationPolicydie folgende Validierungs-Policy hinzu:"validationPolicy": { "type": "REMOTE_DISCOVERY", "clientDetails": { "type": "CUSTOM", "clientId": "<client-id>", "clientSecretId": "<secret-ocid>", "clientSecretVersionNumber": <secret-version-number> }, "sourceUriDetails": { "type": "DISCOVERY_URI", "uri": "<well-known-uri>" }, "isSslVerifyDisabled": <true|false>, "maxCacheDurationInHours": <cache-time>, "additionalValidationPolicy": { "issuers": ["<issuer-url>", "<issuer-url>"], "audiences": ["<intended-audience>"], "verifyClaims": [{ "key": "<claim-name>", "values": ["<acceptable-value>", "<acceptable-value>"], "isRequired": <true|false> }] } }Dabei gilt:
-
"validationPolicy": {"type": "REMOTE_DISCOVERY"...}gibt an, dass Sie Token mit dem Introspektionsendpunkt eines OAuth 2.0-Autorisierungsservers mit Clientzugangsdaten validieren möchten (einschließlich eines Client-Secrets, das aus einem Vault im Vault-Service abgerufen wird). -
clientDetails": {"type": "CUSTOM"...}gibt Details des Client-Secrets an, das aus einem Vault im Vault-Service abgerufen werden soll:-
"clientId": "<client-id>"gibt die Client-ID an, die an den Introspektionsendpunkt gesendet werden soll. Sie erhalten eine Client-ID, indem Sie eine Clientanwendung beim Autorisierungsserver erstellen und registrieren. Beispiel:5hsti38yhy5j2a4tas455rsu6ru8yui3wrst4n1. Siehe Voraussetzungen für die Tokenauthentifizierung. -
"clientSecretId": "<secret-ocid>"gibt die OCID des Vault Secrets an, das das Client Secret enthält, das an den Introspektionsendpunkt gesendet werden soll. Beispiel:ocid1.vaultsecret.oc1.iad.amaaaaaa______cggit3q -
"clientSecretVersionNumber": <secret-version-number>gibt die Version des Vault Secret an, das das Client Secret enthält, das an den Introspektionsendpunkt gesendet werden soll. Zum Beispiel1
-
-
"uri": "<well-known-uri>"gibt die bekannte URL eines Autorisierungsservers an, von dem das API-Gateway Autorisierungsmetadatenendpunkte abrufen soll. Beispiel:https://my-idp/oauth2/default/.well-known/openid-configuration. Beachten Sie, dass die URL aus dem Subnetz mit dem API-Gateway geroutet werden kann, in dem die API bereitgestellt wird. -
"isSslVerifyDisabled": <true|false>gibt an, ob die SSL-Überprüfung beim Kommunizieren mit dem Autorisierungsserver deaktiviert werden soll Oracle empfiehlt, diese Option nicht auftruezu setzen, weil sie das JWT-Validierung kompromittieren kann. API Gateway vertraut Zertifikaten von mehreren Certificate Authoritys, die für OCI IAM mit Identitätsdomains, Oracle Identity Cloud Service (IDCS), Auth0 und Okta ausgestellt werden. -
"maxCacheDurationInHours": <cache-time>gibt an, wie viele Stunden (zwischen 1 und 24) lang das API-Gateway die Antwort vom Introspektionsendpunkt cachen soll. -
"additionalValidationPolicy": {"issuers": ...}gibt zusätzliche Details für die Tokenvalidierung an:-
<issuer-url>ist die URL (oder eine Textzeichenfolge) für einen Autorisierungsserver, die im Ausstellerclaim (iss) eines JWTs für den Zugriff auf das API-Deployment zulässig ist. Beispiel: Um ein von OCI IAM mit Identitätsdomains ausgegebenes JWT für den Zugriff auf das API-Deployment zu aktivieren, geben Siehttps://identity.oraclecloud.com/an. Sie können einen oder mehrere Autorisierungsserver (maximal fünf) angeben. Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
<intended-audience>ist ein Wert, der im Zielgruppenclaim (aud) eines JWT zur Identifikation des beabsichtigten Empfängers des Tokens zulässig ist. Beispiel: Die Zielgruppe kann (muss aber nicht) dem Hostnamen des API-Gateways entsprechen. Sie können eine oder mehrere Zielgruppen angeben (maximal fünf). Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
"verifyClaims": {...}gibt optional zusätzliche Claimnamen und -werte für einen oder mehrere zusätzliche Claims zur Validierung in einem JWT an (maximal zehn):-
"key": "<claim-name>"ist der Name eines Claims, der in einem JWT enthalten sein kann oder muss. Der angegebene Claimname kann ein reservierter Claimname sein, wie der Subject-Claim (sub), oder ein benutzerdefinierter Claimname, der von einem bestimmten Autorisierungsserver ausgestellt wird. -
"values": ["<acceptable-value>", "<acceptable-value>"](optional) gibt einen oder mehrere zulässige Werte für den Claim an. -
"isRequired": <true|false>gibt an, ob der Claim im JWT enthalten sein muss.
Beachten Sie, dass alle eingegebenen Schlüsselnamen und -werte einfach wie Zeichenfolgen behandelt werden und exakt mit den Namen und Werten im JWT übereinstimmen müssen. Das Abgleichen von Mustern und andere Datentypen werden nicht unterstützt.
-
-
Beispiel: Die folgende
authentication-Policy konfiguriert das API-Gateway so, dass ein Token im Autorisierungsanforderungsheader mit Clientzugangsdaten (einschließlich eines Client-Secrets, das aus einem Vault im Vault-Service abgerufen wird) validiert wird, das an einen OAuth 2.0-Introspektionsendpunkt übergeben wird:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": false, "maxClockSkewInSeconds": 10, "validationPolicy": { "type": "REMOTE_DISCOVERY", "clientDetails": { "type": "CUSTOM", "clientId": "5hsti38yhy5j2a4tas455rsu6ru8yui3wrst4n1", "clientSecretId": "ocid1.vaultsecret.oc1.iad.amaaaaaa______cggit3q", "clientSecretVersionNumber": 1 }, "sourceUriDetails": { "type": "DISCOVERY_URI", "uri": "https://my-idp/oauth2/default/.well-known/openid-configuration" }, "isSslVerifyDisabled": false, "maxCacheDurationInHours": 2, "additionalValidationPolicy": { "issuers": ["https://identity.oraclecloud.com/"], "audiences": ["api.dev.io"], "verifyClaims": [{ "key": "is_admin", "values": ["service:app", "read:hello"], "isRequired": true }] } } } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
-
Wenn das API-Gateway JWTs validieren soll, indem öffentliche Verifizierungsschlüssel zur Laufzeit vom Identitätsprovider abgerufen werden, fügen Sie die folgende Validierungs-Policy zum leeren Abschnitt
validationPolicyhinzu:"validationPolicy": { "type": "REMOTE_JWKS", "uri": "<uri-for-jwks>", "isSslVerifyDisabled": <true|false>, "maxCacheDurationInHours": <cache-time>, "additionalValidationPolicy": { "issuers": ["<issuer-url>", "<issuer-url>"], "audiences": ["<intended-audience>"], "verifyClaims": [{ "key": "<claim-name>", "values": ["<acceptable-value>", "<acceptable-value>"], "isRequired": <true|false> }] } }Dabei gilt:
-
"validationPolicy": {"type": "REMOTE_JWKS"...gibt an, dass Sie das API-Gateway so konfigurieren möchten, dass bis zu zehn öffentliche Verifizierungsschlüssel zur Laufzeit vom Identitätsprovider abgerufen werden. -
"uri": "<uri-for-jwks>"gibt die URI an, von der das JSON Web Key Set (JWKS) abgerufen werden soll, mit dem die Signatur der JWTs verifiziert werden soll. Weitere Informationen über die anzugebende URI finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. Beachten Sie dabei Folgendes:- Die URI muss aus dem Subnetz mit dem API-Gateway routbar sein, in dem die API bereitgestellt wird.
- Wenn das API-Gateway das JWKS nicht abrufen kann, geben alle Anforderungen an das API-Deployment einen HTTP 500-Antwortcode zurück. Weitere Informationen zum Fehler finden Sie im Ausführungslog des API-Gateways (siehe Logging zu API-Deployments hinzufügen).
- Bestimmte Schlüsselparameter müssen im JWKS vorhanden sein, um die JWT-Signatur zu verifizieren (siehe Erforderliche Schlüsselparameter zum Überprüfen von JWT-Signaturen).
- Der JWKS kann bis zu zehn Schlüssel enthalten.
-
"isSslVerifyDisabled": <true|false>gibt an, ob die SSL-Überprüfung bei der Kommunikation mit dem Identitätsprovider deaktiviert werden soll. Oracle empfiehlt, diese Option nicht auftruezu setzen, weil sie das JWT-Validierung kompromittieren kann. API Gateway vertraut Zertifikaten von mehreren Certificate Authoritys, die für OCI IAM mit Identitätsdomains, Oracle Identity Cloud Service (IDCS), Auth0 und Okta ausgestellt werden. -
"maxCacheDurationInHours": <cache-time>gibt an, wieviele Stunden (zwischen 1 und 24) lang das API-Gateway das JWKS-Satz nach den Abrufen cachten soll. -
"additionalValidationPolicy": {"issuers": ...}gibt zusätzliche Details für die Tokenvalidierung an:-
<issuer-url>ist die URL (oder eine Textzeichenfolge) für einen Identitätsprovider, der im Ausstellerclaim (iss) eines JWTs für den Zugriff auf das API-Deployment zulässig ist. Beispiel: Um ein von OCI IAM ausgestelltes JWT mit Identitätsdomains für den Zugriff auf die API-Bereitstellung zu aktivieren, geben Siehttps://identity.oraclecloud.com/ein. Sie können einen oder mehrere Identitätsprovider angeben (maximal fünf). Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
<intended-audience>ist ein Wert, der im Zielgruppenclaim (aud) eines JWT zur Identifikation des beabsichtigten Empfängers des Tokens zulässig ist. Beispiel: Die Zielgruppe kann (muss aber nicht) dem Hostnamen des API-Gateways entsprechen. Sie können eine oder mehrere Zielgruppen angeben (maximal fünf). Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
verifyClaimsgibt optional zusätzliche Claimnamen und -werte für einen oder mehrere zusätzliche Claims zur Überprüfung in einem JWT an (maximal zehn).-
"key": "<claim-name>"ist der Name eines Claims, der in einem JWT enthalten sein kann oder muss. Der angegebene Claimname kann ein reservierter Claimname sein, wie der Subject-Claim (sub), oder ein benutzerdefinierter Claimname, der von einem bestimmten Identitätsprovider ausgestellt wird. -
"values": ["<acceptable-value>", "<acceptable-value>"](optional) gibt einen oder mehrere zulässige Werte für den Claim an. -
"isRequired": <true|false>gibt an, ob der Claim im JWT enthalten sein muss.
Beachten Sie, dass alle eingegebenen Schlüsselnamen und -werte einfach wie Zeichenfolgen behandelt werden und exakt mit den Namen und Werten im JWT übereinstimmen müssen. Das Abgleichen von Mustern und andere Datentypen werden nicht unterstützt.
-
-
Beispiel: Die folgende
authentication-Policy konfiguriert das API-Gateway, um das JWT im Autorisierungsanforderungsheader zu validieren, indem öffentliche Verifizierungsschlüssel zur Laufzeit vom Identitätsprovider abgerufen werden:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": false, "validationPolicy": { "type": "REMOTE_JWKS", "uri": "https://my-tenant-id.identity.oraclecloud.com/admin/v1/SigningCert/jwk", "isSslVerifyDisabled": false, "maxCacheDurationInHours": 2, "additionalValidationPolicy": { "issuers": ["https://identity.oraclecloud.com/"], "audiences": ["api.dev.io"], "verifyClaims": [{ "key": "is_admin", "values": ["service:app", "read:hello"], "isRequired": true }] } } } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
-
Wenn das API-Gateway JWTs mit öffentlichen Prüfschlüsseln validieren soll, die bereits von einem Identitätsprovider ausgestellt wurden (sodass das API-Gateway JWTs lokal verifizieren kann, ohne dass der Identitätsprovider kontaktiert werden müsste), fügen Sie die folgende Validierungs-Policy zum leeren Abschnitt
validationPolicyhinzu:"validationPolicy": { "type": "STATIC_KEYS", "keys": [{<key-config>}], "isSslVerifyDisabled": <true|false>, "maxCacheDurationInHours": <cache-time>, "additionalValidationPolicy": { "issuers": ["<issuer-url>", "<issuer-url>"], "audiences": ["<intended-audience>"], "verifyClaims": [{ "key": "<claim-name>", "values": ["<acceptable-value>", "<acceptable-value>"], "isRequired": <true|false> }] } }Dabei gilt:
-
"validationPolicy": {"type": "STATIC_KEYS"...gibt an, dass Sie das API-Gateway mit bis zu zehn öffentlichen Verifizierungsschlüsseln konfigurieren möchten, die bereits von einem Identitätsprovider ausgestellt wurden (So kann das API-Gateway JWTs lokal verifizieren, ohne den Identitätsprovider kontaktieren zu müssen). -
"keys": [{<key-config>}]: Geben Sie die ID des statischen Schlüssels an, mit dem das JWT signiert wird. Welche Details angegeben werden sollen, hängt vom Format des Schlüssels ab, der bereits vom Identitätsprovider ausgegeben wurde (unabhängig vom Format können Sie bis zu zehn Schlüssel angeben):-
Wenn es sich bei dem statischen Schlüssel um einen JSON Web Key handelt, geben Sie
"format": "JSON_WEB_KEY"an, geben Sie die ID des statischen Schlüssels zum Signieren des JWT als Wert des"kid"-Parameters an, und geben Sie Werte für weitere Parameter zur Überprüfung der JWT-Signatur an.Beispiel:
"keys": [ { "format": "JSON_WEB_KEY", "kid": "master_key", "kty": "RSA", "n": "0vx7agoebGc...KnqDKgw", "e": "AQAB", "alg": "RS256", "use": "sig" } ]Beachten Sie, dass bestimmte Parameter im statischen Schlüssel vorhanden sein müssen, um die JWT-Signatur zu verifizieren (siehe Erforderliche Schlüsselparameter zum Überprüfen von JWT-Signaturen). Beachten Sie auch, dass
RSAderzeit der einzige unterstützte Schlüsseltyp (kty) ist. -
Wenn es sich bei dem statischen Schlüssel um einen PEM-codierten Public Key handelt, geben Sie
"format": "PEM"an, geben Sie die ID des statischen Schlüssels zum Signieren des JWT als Wert von"kid"an, und geben Sie den Schlüssel als Wert von"key"an.Beispiel:
"keys": [ { "format": "PEM", "kid": "master_key" "key": -----BEGIN PUBLIC KEY-----XsEiCeYgglwW/KAhSSNRVdD60QlXYMWHOhXzSFDZCLf1WXxKMZCiMvVrsBIzmFEXnFmcsO2mxwlL5/8qQudomoP+yycJ2gWPIgqsZcQRheJWxVC5ep0MeEHlvLnEvCi9utpAnjrsZCQ7plfZVPX7XORvezwqQhBfYzwA27M2FgOOs8DOIYfqQ1Ki3DMqEppFnjLcjgQtknbTlT7YgG6tzobwig8M2KIrPjJ0BmbJAFH-----END PUBLIC KEY----- } ]Beachten Sie, dass die Marker
-----BEGIN PUBLIC KEY-----und-----END PUBLIC KEY-----erforderlich sind.
-
-
"isSslVerifyDisabled": <true|false>gibt an, ob die SSL-Überprüfung bei der Kommunikation mit dem Identitätsprovider deaktiviert werden soll. Oracle empfiehlt, diese Option nicht auftruezu setzen, weil sie das JWT-Validierung kompromittieren kann. API Gateway vertraut Zertifikaten von mehreren Certificate Authoritys, die für OCI IAM mit Identitätsdomains, Oracle Identity Cloud Service (IDCS), Auth0 und Okta ausgestellt werden. -
"maxCacheDurationInHours": <cache-time>gibt an, wieviele Stunden (zwischen 1 und 24) lang das API-Gateway das JWKS-Satz nach den Abrufen cachten soll. -
"additionalValidationPolicy": {"issuers": ...}gibt zusätzliche Details für die Tokenvalidierung an:-
<issuer-url>ist die URL (oder eine Textzeichenfolge) für einen Identitätsprovider, der im Ausstellerclaim (iss) eines JWTs für den Zugriff auf das API-Deployment zulässig ist. Beispiel: Um ein von OCI IAM ausgestelltes JWT mit Identitätsdomains für den Zugriff auf die API-Bereitstellung zu aktivieren, geben Siehttps://identity.oraclecloud.com/ein. Sie können einen oder mehrere Identitätsprovider angeben (maximal fünf). Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
<intended-audience>ist ein Wert, der im Zielgruppenclaim (aud) eines JWT zur Identifikation des beabsichtigten Empfängers des Tokens zulässig ist. Beispiel: Die Zielgruppe kann (muss aber nicht) dem Hostnamen des API-Gateways entsprechen. Sie können eine oder mehrere Zielgruppen angeben (maximal fünf). Informationen hierzu finden Sie unter Identitätsproviderdetails für iss- und aud-Claims sowie für die JWKS-URI. -
verifyClaimsgibt optional zusätzliche Claimnamen und -werte für einen oder mehrere zusätzliche Claims zur Überprüfung in einem JWT an (maximal zehn).-
"key": "<claim-name>"ist der Name eines Claims, der in einem JWT enthalten sein kann oder muss. Der angegebene Claimname kann ein reservierter Claimname sein, wie der Subject-Claim (sub), oder ein benutzerdefinierter Claimname, der von einem bestimmten Identitätsprovider ausgestellt wird. -
"values": ["<acceptable-value>", "<acceptable-value>"](optional) gibt einen oder mehrere zulässige Werte für den Claim an. -
"isRequired": <true|false>gibt an, ob der Claim im JWT enthalten sein muss.
Beachten Sie, dass alle eingegebenen Schlüsselnamen und -werte einfach wie Zeichenfolgen behandelt werden und exakt mit den Namen und Werten im JWT übereinstimmen müssen. Das Abgleichen von Mustern und andere Datentypen werden nicht unterstützt.
-
-
Beispiel: Die folgende
authentication-Policy konfiguriert das API-Gateway mit einem öffentlichen Verifizierungsschlüssel, der bereits von einem Identitätsprovider ausgegeben wurde, um das JWT im Autorisierungsanforderungsheader zu validieren:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": false, "validationPolicy": { "type": "STATIC_KEYS", "keys": [ { "format": "JSON_WEB_KEY", "kid": "master_key", "kty": "RSA", "n": "0vx7agoebGc...KnqDKgw", "e": "AQAB", "alg": "RS256", "use": "sig" } ], "isSslVerifyDisabled": false, "maxCacheDurationInHours": 2, "additionalValidationPolicy": { "issuers": ["https://identity.oraclecloud.com/"], "audiences": ["api.dev.io"], "verifyClaims": [{ "key": "is_admin", "values": ["service:app", "read:hello"], "isRequired": true }] } } } }, "routes": [ { "path": "/hello", "methods": ["GET"], "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } -
- (Optional) Sie können angeben, wie das API-Gateway eine nicht erfolgreiche Authentifizierungsantwort verarbeiten soll (nach einem nicht erfolgreichen Versuch, ein fehlendes oder ungültiges Token zu validieren, zurückgegeben), indem Sie eine Validierungsfehler-Policy einrichten:
- Wenn das API-Gateway einen HTTP 401-Statuscode senden soll und der
WWW-Authenticate-Header in der Antwort (die Standardantwort auf ein fehlendes oder ungültiges Token) keine Validierungsfehler-Policy definieren soll. -
Wenn das API-Gateway einen OpenID Connect-Autorisierungsfluss verwenden soll, um ein neues JWT-Zugriffstoken abzurufen, definieren Sie eine Validierungsfehler-Policy vom Typ
OAUTH2. Beachten Sie, dass diese Option nur verfügbar ist, wenn Sie zuvor einenvalidationPolicyvom TypREMOTE_DISCOVERYangegeben haben. Wählen Sie eine der folgenden Optionen aus:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", ... "validationPolicy": { "type": "REMOTE_DISCOVERY", ... }, "validationFailurePolicy": { "type": "OAUTH2", "scopes": ["<scope>", "<scope"], "clientDetails": { "type": "<VALIDATION_BLOCK|CUSTOM>", "clientId": "<client-id>", "clientSecretId": "<secret-ocid>", "clientSecretVersionNumber": <secret-version-number> }, "sourceUriDetails": { "type": "VALIDATION_BLOCK" }, "maxExpiryDurationInHours": <number-of-hours>, "useCookiesForSession": <true|false>, "useCookiesForIntermediateSteps": <true|false>, "usePkce": <true|false>, "responseType": "code", "fallbackRedirectPath": "<redirect-path>", "logoutPath": "<logout-path>" } } }, "routes": [ ... ] }Dabei gilt:
-
"scopes": ["<scope>", "<scope"]gibt einen oder mehrere Zugriffsgeltungsbereiche an, die in einen an den Autorisierungsserver gesendetenscope-Claim aufgenommen werden sollen. Um den OpenID Connect-Autorisierungsablauf verwenden zu können, müssen Sieopenidals einen der Geltungsbereiche aufnehmen. Beispiel:"scopes": ["openid", "email:read", "profile"] -
clientDetails": {...}gibt wie folgt die Clientdetails an, die zum Abrufen eines neuen JWT-Zugriffstokens vom Autorisierungsserver verwendet werden sollen:-
"type": "<VALIDATION_BLOCK|CUSTOM>"gibt an, ob dieselben oder andere Clientdetails als in der vorherigenvalidationPolicyangegeben verwendet werden sollen. Wenn Sie dieselben Clientdetails wie zuvor verwenden möchten (in der Regel ist dies der Fall), geben Sie"type": "VALIDATION_BLOCK"an, und geben Sie keine zusätzlichen Details an. Wenn Sie andere Clientdetails verwenden möchten, geben Sie"type": "CUSTOM"an, und legen Sie Werte für"clientId","clientSecretId"und"clientSecretVersionNumber"fest. -
"clientId": "<client-id>"gibt die Client-ID an, die an den Introspektionsendpunkt gesendet werden soll. Nur verwendet, wenn"type": "CUSTOM". Beispiel:5hsti38yhy5j2a4tas455rsu6ru8yui3wrst4n1 -
"clientSecretId": "<secret-ocid>"gibt die OCID des Vault Secrets an, das das Client Secret enthält, das an den Introspektionsendpunkt gesendet werden soll. Nur verwendet, wenn"type": "CUSTOM". Beispiel:ocid1.vaultsecret.oc1.iad.amaaaaaa______cggit3q -
"clientSecretVersionNumber": <secret-version-number>gibt die Version des Vault Secret an, das das Client Secret enthält, das an den Introspektionsendpunkt gesendet werden soll. Nur verwendet, wenn"type": "CUSTOM". Zum Beispiel1
-
-
"sourceUriDetails": {"type": "VALIDATION_BLOCK"}gibt an, dass Sie dieselbe URL verwenden möchten, die in der vorherigenvalidationPolicyangegeben ist, wie die bekannte URL eines Autorisierungsservers, von dem das API-Gateway Autorisierungsmetadatenendpunkte abrufen soll. -
"maxExpiryDurationInHours": <number-of-hours>gibt an, wie lange das vom Autorisierungsfluss generierte JWT-Token gecacht werden soll. Der Standardwert ist 1. -
"useCookiesForSession": <true|false>gibt an, wie neu generierte JWT-Token als nicht menschenlesbare Zeichenfolgen am Ende eines OpenID Connect-Autorisierungsablaufs gespeichert werden:- Setzen Sie diese Option auf
true, wenn Sie das neue JWT-Token in einem Sessioncookie speichern möchten. Um potenzielle CSRF-Angriffe zu verhindern, gibt das API-Gateway, wenn es das TOKEN in einem Sessioncookie speichert, auch ein CSRF-TOKEN in einem X-CSRF-TOKEN-Antwortheader zurück. Nachfolgende Anforderungen (außer GET-Anforderungen) müssen das CSRF-TOKEN in einem X-CSRF-TOKEN-Anforderungsheader enthalten, zusätzlich zum JWT-TOKEN im Sessioncookie, das automatisch enthalten ist. - Setzen Sie diese Option auf
false, wenn Sie das neue JWT-Token nicht in einem Sessioncookie speichern möchten. Stattdessen gibt das API-Gateway ein nicht menschenlesbares TOKEN in einem X-APIGW-TOKEN-Antwortheader zurück. Nachfolgende Anforderungen an das API-Gateway müssen dasselbe TOKEN in einem X-APIGW-TOKEN-Anforderungsheader enthalten.
- Setzen Sie diese Option auf
-
"useCookiesForIntermediateSteps": <true|false>gibt an, wie Zwischenschrittwerte für den Autorisierungsablauf gespeichert werden (z.B. Anforderungsparameter). Setzen Sie diese Option auftrue, um die Werte in Browser-Cookies zu speichern. Setzen Sie diese Option auffalse, um die Werte mit dem API-Gateway zu speichern. -
"usePkce": <true|false>gibt an, ob PKCE (Proof Key for Code Exchange) für zusätzliche Sicherheit verwendet werden soll. PKCE ist eine OAuth 2.0-Sicherheitserweiterung, um CSRF (Cross-Site Request Forgery) und Autorisierungscode-Injection-Angriffe zu verhindern. PKCE ist kein Ersatz für ein Client Secret, und PKCE wird empfohlen, auch wenn ein Client Secret verwendet wird. Weitere Informationen zu PKCE finden Sie in der Dokumentation zu OAuth 2.0. -
"responseType": "code"gibt den Typ der Antwort an, die für den Autorisierungsablauf erforderlich ist. Geben Siecodeals Antworttyp an. -
"fallbackRedirectPath": "/home"gibt optional einen relativen Pfad im aktuellen API-Deployment an, an den API-Clients umgeleitet werden sollen, wenn die ursprüngliche Anforderung eine PUT-Anforderung oder eine POST-Anforderung war. Beispiel:/home.Wenn die ursprüngliche Anforderung eine GET-Anforderung war, wird die Anforderungsverarbeitung mit einem neuen JWT-Zugriffstoken fortgesetzt, sodass kein Fallback-Pfad verwendet wird.
-
"logoutPath": "<revoke-path>"gibt optional einen relativen Pfad zu einem Abmelde-Backend im aktuellen API-Deployment an. Der angegebene Pfad muss mit dem Pfad übereinstimmen, der für das Abmelde-Backend definiert ist. Beispiel:"logoutPath": "/revoke".Ein API-Client kann das Abmelde-Backend aufrufen, um Token zu entziehen. Ein Aufruf des Abmelde-Backends kann eine Abmelde-URL als Abfrageparameter mit dem Namen
postLogoutUrlenthalten. Siehe Abmeldung als API-Gateway-Backend hinzufügen.
Beispiel:
{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", ... "validationPolicy": { "type": "REMOTE_DISCOVERY", ... }, "validationFailurePolicy": { "type": "OAUTH2", "scopes": ["openid", "email:read", "profile"], "clientDetails": { "type": "VALIDATION_BLOCK" }, "sourceUriDetails": { "type": "VALIDATION_BLOCK" }, "maxExpiryDurationInHours": 2, "useCookiesForSession": true, "useCookiesForIntermediateSteps": true, "usePkce": true, "responseType": "code", "fallbackRedirectPath": "/home", "logoutPath": "/revoke" } } }, "routes": [ ... ] } -
- Wenn Sie die Antwort an einen nicht erfolgreichen Versuch anpassen möchten, ein fehlendes oder ungültiges Token zu validieren, definieren Sie eine Validierungsfehler-Policy vom Typ
MODIFY_RESPONSE, und geben Sie einen Statuscode (und einen optionalen Nachrichtentext) an, um zum API-Client zurückzukehren:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", ... "validationPolicy": { ... }, "validationFailurePolicy": { "type": "MODIFY_RESPONSE", "responseCode": "<alternative-response-code>", "responseMessage": "<custom-message-body>", "responseTransformations": { "headerTransformations": { <valid-header-transformation-response-policy> } } } } }, "routes": [ ... ] }Dabei gilt:
-
responseCode: Gibt einen alternativen HTTP-Statuscode an. Beispiel:500. -
responseMessage: (optional) gibt einen Nachrichtentext an. Beispiel:Unfortunately, authentication failed.Der Nachrichtentext kann eine beliebige Kontextvariable enthalten (außerrequest.body). -
responseTransformations: (optional) ändert die Header der Antwort, die das API-Gateway an den API-Client zurückgibt, indem eine Headertransformationsantwort-Policy angegeben wird. Weitere Informationen zu Headertransformations-Policys finden Sie unter Headertransformationsantwort-Policys hinzufügen.
Beispiel:
{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", ... "validationPolicy": { ... }, "validationFailurePolicy": { "type": "MODIFY_RESPONSE", "responseCode": "500", "responseMessage": "Unfortunately, authentication failed.", } } }, "routes": [ ... ] } -
- Wenn das API-Gateway einen HTTP 401-Statuscode senden soll und der
-
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": "TOKEN_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": false, "validationPolicy": { "type": "STATIC_KEYS", "keys": [ { "format": "JSON_WEB_KEY", "kid": "master_key", "kty": "RSA", "n": "0vx7agoebGc...KnqDKgw", "e": "AQAB", "alg": "RS256", "use": "sig" } ], "isSslVerifyDisabled": false, "maxCacheDurationInHours": 2, "additionalValidationPolicy": { "issuers": ["https://identity.oraclecloud.com/"], "audiences": ["api.dev.io"], "verifyClaims": [{ "key": "is_admin", "values": ["service:app", "read:hello"], "isRequired": true }] } } } }, "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 zum neuenrequestPolicies-Abschnitt hinzufügen:"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 derscope-Claim des JWT einen der Zugriffsgeltungsbereiche enthält, die Sie in der EigenschaftallowedScopeangeben. 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 auftruesetzen.
-
-
"allowedScope": [ "<scope>" ]ist eine kommagetrennte Liste mit mindestens einer Zeichenfolge, die einem imscope-Claim des JWT enthaltenen Zugriffsgeltungsbereich 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 angegebenen Geltungsbereiche imscope-Claim des JWT enthalten ist.
Beispiel: Die folgende Anforderungs-Policy definiert eine
/hello-Route, die nur authentifizierten Endbenutzern mit dem Geltungsbereichread:helloZugriff gewährt:{ "requestPolicies": { "authentication": { "type": "TOKEN_AUTHENTICATION", "tokenHeader": "Authorization", "tokenAuthScheme": "Bearer", "isAnonymousAccessAllowed": false, "validationPolicy": { "type": "STATIC_KEYS", "keys": [ { "format": "JSON_WEB_KEY", "kid": "master_key", "kty": "RSA", "n": "0vx7agoebGc...KnqDKgw", "e": "AQAB", "alg": "RS256", "use": "sig" } ], "isSslVerifyDisabled": false, "maxCacheDurationInHours": 2, "additionalValidationPolicy": { "issuers": ["https://identity.oraclecloud.com/"], "audiences": ["api.dev.io"], "verifyClaims": [{ "key": "is_admin", "values": ["service:app", "read:hello"], "isRequired": true }] } } } }, "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 unabhängig von den Zugriffsgeltungsbereichen im
scope-Claim des JWT auf die Route zugreifen - 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-Deployments in einem API-Gateway implementieren und API-Gateways aktualisieren.
- (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).