Aggiunta di più server di autenticazione alla stessa distribuzione API

Un requisito comune è quello di autenticare le richieste inviate alla stessa distribuzione API in modi diversi. Ad esempio, potrebbe essere necessario inviare una richiesta in entrata da un client API a una funzione del responsabile autorizzazioni per l'autenticazione. Tuttavia, si potrebbe desiderare che un token Web JSON (JWT) incluso in una richiesta in entrata da un altro client API venga convalidato con un provider di identità. Per comodità, questi diversi tipi di autenticazione e autorizzazione (funzione dell'autore, autenticazione JWT) sono indicati come "server di autenticazione".

Per soddisfare il requisito di autenticazione delle richieste inviate a una distribuzione API in modi diversi, è possibile definire più server di autenticazione per la stessa distribuzione API. I server di autenticazione impostati possono essere dello stesso tipo o di un tipo diverso. È possibile specificare i tipi di server di autenticazione riportati di seguito.

Quando si definiscono più server di autenticazione per la stessa distribuzione API, è possibile creare regole per consentire al gateway API di selezionare in modo dinamico il server di autenticazione da utilizzare per autenticare le richieste, in base a un elemento della richiesta originale.

Per consentire al gateway API di selezionare in modo dinamico il server di autenticazione corretto, utilizzare le seguenti variabili di contesto per acquisire gli elementi della richiesta:

  • request.auth[<key>] dove <key> è il nome di una richiesta contenuta in un token JWT.
  • request.headers[<key>] dove <key> è il nome di un'intestazione inclusa nella richiesta all'API.
  • request.host come nome dell'host a cui è stata inviata la richiesta originale.
  • request.path[<key>] dove <key> è il nome di un parametro di percorso definito nella specifica di distribuzione API.
  • request.query[<key>] dove <key> è il nome di un parametro di query incluso nella richiesta all'API.
  • request.subdomain[<key>] dove <key> è la parte finale del nome host da ignorare durante l'acquisizione della parte iniziale del nome host a cui è stata inviata la richiesta originale.

Tenere presente che se una variabile di contesto ha più valori, quando si seleziona il server di autenticazione viene utilizzato solo il primo valore. Per ulteriori informazioni sulle variabili di contesto, vedere Aggiunta di variabili di contesto ai criteri e alle definizioni backend HTTP.

È possibile impostare più server di autenticazione per la stessa distribuzione API in una specifica di distribuzione API effettuando le operazioni riportate di seguito.

  • Uso di Console.
  • Modifica di un file JSON.

Note sulla corrispondenza delle regole del server di autenticazione

Quando si creano le regole per determinare il server di autenticazione da utilizzare, è possibile specificare il livello di corrispondenza tra il valore della variabile di contesto e un determinato valore affinché la richiesta venga instradata a un determinato server di autenticazione. È possibile richiedere una corrispondenza esatta oppure specificare un valore che inizia con o termina con un carattere jolly. Il gateway API valuta le regole nell'ordine specificato (prima le regole di corrispondenza esatta, seguite dalle regole con caratteri jolly) e utilizza la prima regola di corrispondenza. È inoltre possibile specificare una regola predefinita da utilizzare se il valore della variabile di contesto non corrisponde ad alcuna regola del server di autenticazione. Se non viene specificata alcuna regola come predefinita e il valore della variabile di contesto in una richiesta in entrata non corrisponde ad alcuna regola del server di autenticazione, la richiesta restituisce un errore. L'ordine di precedenza per determinare quale regola del server di autenticazione (e quindi quale server di autenticazione) utilizzare può essere riepilogato come:

  • Se il valore della variabile di contesto corrisponde esattamente al valore di una regola, utilizzare tale regola.
  • In caso contrario, se il valore della variabile di contesto corrisponde al valore di una regola che inizia o termina con un carattere jolly, utilizzare la prima regola contenente un carattere jolly corrispondente.
  • Altrimenti, se una regola è specificata come regola predefinita, utilizzarla.
  • In caso contrario, restituire una risposta di errore 401 Unauthorized.

Uso della console per aggiungere più server di autenticazione alla stessa distribuzione API

Per aggiungere più server di autenticazione per la stessa distribuzione API a una specifica di distribuzione API utilizzando la console:

  1. Creare o aggiornare una distribuzione API utilizzando la console, selezionare l'opzione Da zero e immettere i dettagli nella pagina Informazioni di base.

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  2. Fare clic su Avanti per visualizzare la pagina Autenticazione.
  3. Selezionare Autenticazione multipla per specificare che si desidera che le richieste di autenticazione vengano instradate a server di autenticazione diversi, in base alla variabile di contesto e alle regole immesse:
    1. Nell'elenco Selettore selezionare la tabella di contesto (che contiene la variabile di contesto) da utilizzare per determinare il server di autenticazione al quale inviare la richiesta di autenticazione, come indicato di seguito.
      • Autore: utilizzare il valore di una richiesta contenuta in un JWT (e salvata nella tabella di contesto request.auth) per determinare il server di autenticazione. Tenere presente che se si seleziona Autore, è necessario specificare i server di autenticazione di tipo JSON Web Token (JWT) per tutte le regole del server di autenticazione nella distribuzione API. Se si seleziona Autore dalla lista Selettore, tenere presente che la posizione dei JWT deve essere la stessa per tutti i server di autenticazione JWT (JSON Web Token) (lo stesso schema di intestazione e autorizzazione della richiesta o lo stesso parametro di query).
      • Intestazioni: utilizzare il valore di un'intestazione della richiesta originale (e salvata nella tabella di contesto request.headers) per determinare il server di autenticazione.
      • Host: utilizzare il nome dell'host al quale è stata inviata la richiesta originale (estratto dal campo host dell'intestazione dell'host nella richiesta e salvato nella tabella di contesto request.host) per determinare il server di autenticazione.
      • Percorso: utilizzare un parametro di percorso della richiesta originale (e salvato nella tabella di contesto request.path) per determinare il server di autenticazione.
      • Parametri query: utilizzare il valore di un parametro di query della richiesta originale (e salvato nella tabella di contesto request.query) per determinare il server di autenticazione.
      • Sottodominio: utilizzare la parte iniziale del nome host a cui è stata inviata la richiesta originale, ovvero la parte del nome host non specificata come chiave e salvata nella tabella di contesto request.subdomain, per determinare il server di autenticazione. Si noti che la chiave è la parte finale del nome host da non utilizzare.
    2. A seconda della tabella di contesto selezionata, immettere il nome della chiave da utilizzare per determinare il server di autenticazione a cui inviare la richiesta di autenticazione.
  4. Fare clic su Definisci criterio per immettere una regola per la variabile di contesto che, se soddisfatta, instrada la richiesta di autenticazione al server di autenticazione definito.
  5. Immettere i dettagli per la regola del server di autenticazione come indicato di seguito.
    • Nome: immettere un nome per la regola del server di autenticazione. Utilizzare il nome immesso per identificare il server di autenticazione quando si fa riferimento a log e metriche. Il nome deve essere univoco in tutte le regole del server di autenticazione definite per la distribuzione API.
    • Tipo di corrispondenza: specificare il livello di corrispondenza tra il valore della variabile di contesto e un valore immesso affinché la richiesta venga instradata a questo server di autenticazione. Selezionare Qualsiasi di se la variabile di contesto deve corrispondere esattamente al valore nel campo Valori. Selezionare Carattere jolly se la variabile di contesto deve corrispondere a un valore nel campo Espressione contenente i caratteri jolly. La corrispondenza dei valori non fa distinzione tra maiuscole e minuscole se si seleziona Qualsiasi di e la distinzione tra maiuscole e minuscole se si seleziona Carattere jolly.
    • Valori: (visualizzato se nel campo Tipo di corrispondenza è stata selezionata l'opzione Qualsiasi di). Specificare un valore (o più valori in una lista separata da virgole) che la variabile di contesto deve corrispondere esattamente. Tenere presente che la corrispondenza non fa distinzione tra maiuscole e minuscole se è stata selezionata l'opzione Qualsiasi di. Tenere inoltre presente che i valori devono essere univoci all'interno di una singola regola del server di autenticazione e in tutte le regole del server di autenticazione definite per la distribuzione dell'API.
    • Espressione: (visualizzato se è stato selezionato Carattere jolly nel campo Tipo di corrispondenza) specificare un valore che inizia o termina con un carattere jolly a cui deve corrispondere la variabile di contesto. Utilizzare il carattere jolly * (asterisco) per indicare zero o più caratteri e/o il carattere jolly + (segno più) per indicare uno o più caratteri. Tenere presente che la corrispondenza fa distinzione tra maiuscole e minuscole se si seleziona Carattere jolly. Tenere presente che non è possibile includere più di un carattere jolly in un valore e che non è possibile includere un carattere jolly al centro di un valore.
    • Impostare l'impostazione predefinita: specificare se utilizzare il server di autenticazione definito per questa regola se nessun'altra regola del server di autenticazione corrisponde al valore della variabile di contesto. È possibile specificare una sola regola del server di autenticazione come predefinita per una distribuzione API. Se nessuna regola viene contrassegnata come predefinita e il valore della variabile di contesto in una richiesta in entrata non corrisponde ad alcuna regola del server di autenticazione definita per una distribuzione API, la richiesta restituisce una risposta di errore 401 Unauthorized.
  6. Selezionare o deselezionare la casella di controllo Abilita accesso anonimo per specificare se gli utenti finali non autenticati (ovvero anonimi) possono accedere agli instradamenti nella distribuzione dell'API.

    Per impostazione predefinita, questa opzione non è selezionata. Se non si desidera che utenti anonimi possano accedere ai percorsi, non selezionare questa opzione. Tenere presente che se si seleziona questa opzione, è inoltre necessario specificare in modo esplicito ogni instradamento per il quale è consentito l'accesso anonimo selezionando Anonimo come Tipo di autorizzazione nel criterio di autorizzazione di ogni instradamento.

  7. Inserire i dettagli per il server di autenticazione come indicato di seguito.
    1. Nel campo Tipo di autenticazione, selezionare JSON Web Token (JWT) o Funzione autorezer come server di autenticazione a cui instradare la richiesta di autenticazione se la regola immessa viene soddisfatta.

      Se si seleziona Autore dalla lista Selettore, è necessario selezionare JSON Web Token (JWT) come tipo di server di autenticazione. Se è stata selezionata l'opzione Autore dalla lista Selettore, tenere presente che la posizione dei JWT deve essere la stessa per tutti i server di autenticazione JWT (JSON Web Token) (lo stesso schema di intestazione e autorizzazione della richiesta o lo stesso parametro di query).

    2. Immettere i dettagli per il server di autenticazione selezionato. I dettagli da immettere dipenderanno dal tipo di server di autenticazione selezionato:
    3. Fare clic su Definisci per creare il server di autenticazione e la regola associata.
  8. Facoltativamente, fare di nuovo clic su Definisci criterio per definire server di autenticazione aggiuntivi e regole associate.
  9. Fare clic su Avanti per immettere i dettagli relativi ai singoli instradamenti nella distribuzione API nella pagina Instradamenti.
  10. Fare clic su Salva modifiche, quindi su Avanti per esaminare i dettagli immessi per la distribuzione dell'API.
  11. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  12. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).

Modifica di un file JSON per aggiungere più server di autenticazione alla stessa distribuzione API

Per aggiungere più server di autenticazione per la stessa distribuzione API a una specifica di distribuzione API in un file JSON, effettuare le operazioni riportate di seguito.

  1. Utilizzando l'editor JSON preferito, creare una nuova specifica di distribuzione API (vedere Creazione di una specifica di distribuzione API) nel formato seguente:

    {
      "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": []
    }

    dove:

    • "dynamicAuthentication" specifica che si desidera che il gateway API selezioni in modo dinamico il server di autenticazione da utilizzare per autenticare le richieste, in base a un elemento nella richiesta.
    • "selector": "<context-table-key>" specifica la tabella di contesto (e la chiave, se appropriato) da cui ottenere il valore della variabile di contesto che determina il server di autenticazione a cui inviare le richieste di autenticazione, come indicato di seguito.
      • request.auth[<key>] Utilizzare il valore di una richiesta contenuta in un token Web JSON (JWT) per determinare il server di autenticazione. <key> è il nome della richiesta. Ad esempio, request.auth[tenant]. Se si specifica request.auth[<key>], è necessario specificare i server di autenticazione di tipo JWT_AUTHENTICATION per tutte le regole del server di autenticazione nella distribuzione API. Se si specifica request.auth[<key>], si noti inoltre che la posizione dei JWT deve essere la stessa per tutti i server di autenticazione (lo stesso schema di intestazione e autorizzazione della richiesta o lo stesso parametro di query).
      • request.headers[<key>] Utilizzare il valore di un'intestazione della richiesta originale per determinare il server di autenticazione. <key> è il nome dell'intestazione. Ad esempio, request.headers[Accept]
      • request.host Utilizzare il nome dell'host a cui è stata inviata la richiesta originale (estratto dal campo host dell'intestazione dell'host nella richiesta) per determinare il server di autenticazione.
      • request.path[<key>] Utilizzare un parametro di percorso della richiesta originale per determinare il server di autenticazione. <key> è il nome del parametro di percorso. Ad esempio, request.path[region]
      • request.query[<key>] Utilizzare il valore di un parametro di query della richiesta originale per determinare il server di autenticazione. <key> è il nome del parametro di query. Ad esempio, request.query[state]
      • request.subdomain[<key>] Utilizzare la parte iniziale del nome host a cui è stata inviata la richiesta originale (solo quella parte del nome host non specificata come chiave) per determinare il server di autenticazione. Si noti che <key> è la parte finale del nome host da non utilizzare. Ad esempio, request.subdomain[example.com]
    • "type": "SINGLE" specifica che si desidera utilizzare una singola variabile di contesto per selezionare in modo dinamico il server di autenticazione.
    • "key": {...} specifica la regola che deve essere soddisfatta per inviare una richiesta al server di autenticazione specificato da "authenticationServerDetail": {…}.
    • "type": "<ANY_OF|WILDCARD>" specifica il valore della variabile di contesto identificata da <context-table-key> che deve corrispondere al valore immesso per <context-variable-value> affinché la richiesta venga inviata al server di autenticazione specificato da "authenticationServerDetail": {…}. Specificare ANY_OF se il valore della variabile di contesto identificata da <context-table-key> deve corrispondere esattamente al valore specificato per <context-variable-value>. Specificare WILDCARD se il valore della variabile di contesto identificata da <context-table-key> deve corrispondere a un valore contenente i caratteri jolly specificati per <context-variable-value>. La corrispondenza dei valori non fa distinzione tra maiuscole e minuscole se si specifica ANY_OF e viene fatta distinzione tra maiuscole e minuscole se si specifica WILDCARD.
    • <context-variable-value> è un valore che probabilmente corrisponde al valore della variabile di contesto identificata da <context-table-key>. È possibile includere più voci "<context-variable-value>" nell'array values:[...], separate da virgole. La richiesta viene inviata al server di autenticazione specificato da "authenticationServerDetail": {…} se i valori corrispondono, come indicato di seguito.
      • Se è stato specificato "type": "ANY_OF", i valori devono corrispondere esattamente. Tenere presente che i valori devono essere univoci all'interno di una singola regola del server di autenticazione e in tutte le regole del server di autenticazione definite per una distribuzione API. La corrispondenza dei valori non fa distinzione tra maiuscole e minuscole se è stato specificato ANY_OF.
      • Se è stato specificato "type": "WILDCARD", è possibile specificare un valore per <context-variable-value> che inizi con o termini con un carattere jolly. Utilizzare il carattere jolly * (asterisco) per indicare zero o più caratteri e/o il carattere jolly + (segno più) per indicare uno o più caratteri. Tenere presente che non è possibile includere più di un carattere jolly in un valore e che non è possibile includere un carattere jolly al centro di un valore. La corrispondenza dei valori fa distinzione tra maiuscole e minuscole se è stato specificato WILDCARD.
      Ad esempio, se si desidera che una richiesta di un client API in grado di accettare una risposta xml (come indicato nell'intestazione Accept della richiesta) venga instradata a un determinato server di autenticazione, è possibile specificare:
      • "selector": "request.headers[Accept]"
      • "type": "ANY_OF"
      • "values": ["application/xml"]
    • "isDefault": "<true|false>" è un valore booleano facoltativo (true o false) che indica se utilizzare il server di autenticazione per questa regola se nessun'altra regola del server di autenticazione corrisponde al valore della variabile di contesto. Se non specificato, viene utilizzato il valore "isDefault": "false". È possibile specificare una sola regola del server di autenticazione come predefinita per una distribuzione API. Se nessuna regola viene contrassegnata come predefinita e il valore della variabile di contesto in una richiesta in entrata non corrisponde ad alcuna regola del server di autenticazione definita per una distribuzione API, la richiesta restituisce una risposta di errore 401 Unauthorized.
    • "name": "<rule-name>" specifica un nome per la regola. Utilizzare questo nome per identificare il server di autenticazione quando si fa riferimento a log e metriche. Il nome deve essere univoco in tutte le regole del server di autenticazione definite per la distribuzione API.
    • "type": "<authentication-server-type>" specifica il tipo di server di autenticazione. I valori validi sono JWT_AUTHENTICATION e CUSTOM_AUTHENTICATION. Se è stato specificato request.auth[<key>], è necessario specificare i server di autenticazione di tipo JWT_AUTHENTICATION per tutte le regole del server di autenticazione nella distribuzione API. Se è stato specificato request.auth[<key>], tenere presente che la posizione dei JWT deve essere la stessa per tutti i server di autenticazione (lo stesso schema di intestazione e autorizzazione della richiesta o lo stesso parametro di query).
    • "<auth-server-attribute-name>": "<auth-server-attribute-value>" sono attributi e valori di attributo per il tipo di server di autenticazione specificato. Gli attributi e i valori degli attributi da immettere dipenderanno dal tipo di server di autenticazione specificato:

    Ad esempio, la seguente specifica di distribuzione API include la selezione del server di autenticazione dinamica che gestisce le richieste di autenticazione in base al valore del parametro di query vehicle-type passato nella richiesta. Per una spiegazione più dettagliata di questo esempio, vedere Esempio 1: selezionare la funzione JWT o la funzione serverless come server di autenticazione utilizzando un parametro di query (inclusa la selezione dei caratteri jolly e predefinita).

    {
      "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"
              },
              "authenticationDetail": {
                "type": "CUSTOM_AUTHENTICATION",
                "functionId": "ocid1.fnfunc.oc1.iad.aaaaaaaaac______dfa",
                "isAnonymousAccessAllowed": true
              }
            }
          ]
        }
      },
      "routes": []
    }
  2. Salvare il file JSON contenente la specifica di distribuzione API.
  3. Utilizzare la specifica di distribuzione API quando si crea o si aggiorna una distribuzione API nei modi riportati di seguito.

    • specificando il file JSON nella console quando si seleziona l'opzione Carica un'interfaccia API esistente
    • specificando il file JSON in una richiesta all'API REST del gateway API

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  4. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).

Esempi

Esempio 1: selezionare la funzione JWT o serverless come server di autenticazione utilizzando un parametro di query (inclusa la selezione dei caratteri jolly e predefinita)

In questo esempio, il gateway API determina il server di autenticazione a cui inviare la richiesta di autenticazione in base al valore del parametro di query vehicle-type passato nella richiesta. Se il parametro di query vehicle-type ha il valore car, il JWT nell'intestazione di autorizzazione della richiesta viene convalidato recuperando le chiavi di verifica pubbliche dal provider di identità https://recommend-app.eu.auth0.com. Se il parametro di query vehicle-type contiene un valore che inizia con mini, viene inviata una richiesta di autenticazione a una funzione serverless in Funzioni OCI per l'elaborazione. Se il valore del parametro di query vehicle-type non è carmini*, per impostazione predefinita il gateway API presuppone che nell'intestazione di autorizzazione della richiesta sia presente un JWT e tenta di convalidarlo recuperando chiavi di verifica pubbliche dal provider di identità https://recommend-app.eu.auth0.com:

{
  "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"
          },
          "authenticationDetail": {
            "type": "CUSTOM_AUTHENTICATION",
            "functionId": "ocid1.fnfunc.oc1.iad.aaaaaaaaac______dfa",
            "isAnonymousAccessAllowed": true
          }
        }
      ]
    }
  },
  "routes": []
}

Esempio 2: selezionare il server di autenticazione JWT utilizzando le richieste dei token JWT

In questo esempio, il gateway API determina il server di autenticazione a cui inviare la richiesta di autenticazione in base alla richiesta tenant in un token JWT passato nell'intestazione di autorizzazione della richiesta. Due token JWT di esempio seguono la specifica di distribuzione API:

{
  "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": []
}

Durante l'autenticazione di una richiesta con il seguente token JWT nell'intestazione di autorizzazione, il gateway API recupera il set di chiavi Web JSON (JWKS) per verificare la firma da https://car.us.auth0.com/.well-known/jwks.json.

{
  "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"
}

Durante l'autenticazione di una richiesta con il seguente token JWT nell'intestazione di autorizzazione, il gateway API recupera il set di chiavi Web JSON (JWKS) per verificare la firma da https://truck.us.auth0.com/.well-known/jwks.json.

{
  "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"
}