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.

Um die Anforderung zur Authentifizierung von Anforderungen zu erfüllen, die auf unterschiedliche Weise an ein API-Deployment gesendet werden, können Sie mehrere Authentifizierungsserver für dasselbe API-Deployment definieren. Die eingerichteten Authentifizierungsserver können vom gleichen oder einem anderen Typ sein. Sie können die folgenden Typen von Authentifizierungsservern angeben:

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:

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

  2. Wählen Sie Weiter aus, um die Seite Authentifizierung anzuzeigen.
  3. Wählen Sie Multi-Authentifizierung aus, um anzugeben, dass Authentifizierungsanforderungen gemäß der von Ihnen eingegebenen Kontextvariable und Regeln an verschiedene Authentifizierungsserver weitergeleitet werden sollen:
    1. 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.
    2. 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.
  4. 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.
  5. 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.
  6. 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.

  7. Geben Sie die Details für den Authentifizierungsserver wie folgt ein:
    1. 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).

    2. Geben Sie Details für den ausgewählten Authentifizierungsserver ein. Die einzugebenden Details hängen vom gewählten Authentifizierungsservertyp ab:
    3. Wählen Sie Definieren aus, um den Authentifizierungsserver und die zugehörige Regel zu erstellen.
  8. Wählen Sie optional erneut Policy definieren aus, um zusätzliche Authentifizierungsserver und zugehörige Regeln zu definieren.
  9. Wählen Sie Weiter aus, um Details zu einzelnen Routen im API-Deployment auf der Seite Routen einzugeben.
  10. Wählen Sie Änderungen speichern und dann Weiter aus, um die Details zu prüfen, die Sie für das API-Deployment eingegeben haben.
  11. Wählen Sie Erstellen oder Änderungen speichern aus, um das API-Deployment zu erstellen oder zu aktualisieren.
  12. (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:

  1. 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 Sie request.auth[<key>] angeben, müssen Sie Authentifizierungsserver vom Typ JWT_AUTHENTICATION für alle Authentifizierungsserverregeln im API-Deployment angeben. Wenn Sie request.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 Sie ANY_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 Sie WILDCARD 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 Sie ANY_OF angeben. Wenn Sie WILDCARD 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 Array values:[...] 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 Sie ANY_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 Sie WILDCARD angegeben haben.
      Beispiel: Wenn eine Anforderung von einem API-Client, der eine xml-Antwort akzeptieren kann (wie im Accept-Header der Anforderung angegeben), an einen bestimmten Authentifizierungsserver weitergeleitet werden soll, können Sie Folgendes angeben:
      • "selector": "request.headers[Accept]"
      • "type": "ANY_OF"
      • "values": ["application/xml"]
    • "isDefault": "<true|false>" ist ein optionaler boolescher Wert (entweder true oder false), 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 eine 401 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 sind JWT_AUTHENTICATION und CUSTOM_AUTHENTICATION. Wenn Sie request.auth[<key>] angegeben haben, müssen Sie Authentifizierungsserver vom Typ JWT_AUTHENTICATION für alle Authentifizierungsserverregeln im API-Deployment angeben. Wenn Sie request.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:

    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": []
    }
  2. Speichern Sie die JSON-Datei, die die API-Deployment-Spezifikation enthält.
  3. 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.

  4. (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"
}