Adición de varios servidores de autenticación al mismo despliegue de API

Un requisito común es autenticar las solicitudes enviadas al mismo despliegue de API de diferentes formas. Por ejemplo, puede que desee que una solicitud entrante de un cliente de API se envíe a una función de autorizador para la autenticación. En cambio, puede que desee que un token web JSON (JWT) incluido en una solicitud entrante de un cliente de API diferente se valide con un proveedor de identidad. Para mayor comodidad, estos diferentes tipos de autenticación y autorización (función de autorizador, autenticación JWT) se denominan "servidores de autenticación".

Para cumplir el requisito de autenticar las solicitudes enviadas a un despliegue de API de diferentes formas, puede definir varios servidores de autenticación para el mismo despliegue de API. Los servidores de autenticación que configure pueden ser del mismo tipo o de otro tipo. Puede especificar los siguientes tipos de servidor de autenticación:

Al definir varios servidores de autenticación para el mismo despliegue de API, cree reglas para permitir que el gateway de API seleccione dinámicamente qué servidor de autenticación utilizar para autenticar solicitudes, en función de un elemento de la solicitud original.

Para permitir que el gateway de API seleccione dinámicamente el servidor de autenticación correcto, utilice las siguientes variables de contexto para capturar elementos de la solicitud:

  • request.auth[<key>] donde <key> es el nombre de una reclamación incluida en un token de JWT.
  • request.headers[<key>] donde <key> es el nombre de una cabecera incluida en la solicitud a la API.
  • request.host como nombre del host al que se ha enviado la solicitud original.
  • request.path[<key>] donde <key> es el nombre de un parámetro de ruta de acceso definido en la especificación de despliegue de API.
  • request.query[<key>] donde <key> es el nombre de un parámetro de consulta incluido en la solicitud a la API.
  • request.subdomain[<key>], donde <key> es la parte final del nombre de host que se debe ignorar al capturar la parte inicial del nombre de host al que se ha enviado la solicitud original.

Tenga en cuenta que si una variable de contexto tiene varios valores, solo se utiliza el primer valor al seleccionar el servidor de autenticación. Para obtener más información sobre las variables de contexto, consulte Agregación de variables de contexto a políticas y definiciones de backend HTTP.

Puede configurar varios servidores de autenticación para el mismo despliegue de API en una especificación de despliegue de API:

  • Uso de la consola.
  • Edición de un archivo JSON.

Notas sobre la coincidencia de reglas del servidor de autenticación

Al crear las reglas para determinar qué servidor de autenticación utilizar, puede especificar el grado de coincidencia del valor de variable de contexto con un valor determinado para que la solicitud se direccione a un servidor de autenticación concreto. Puede necesitar una coincidencia exacta o puede especificar un valor que empiece por un comodín o que termine por él. El gateway de API evalúa las reglas en el orden especificado (las reglas de coincidencia exacta primero, seguidas de las reglas comodín) y utiliza la primera regla de coincidencia. También puede especificar una regla por defecto que utilizar si el valor de la variable de contexto no coincide con ninguna regla del servidor de autenticación. Si no se especifica ninguna regla como valor por defecto y el valor de variable de contexto en una solicitud entrante no coincide con ninguna regla del servidor de autenticación, la solicitud devuelve un error. El orden de prioridad para determinar qué regla del servidor de autenticación (y, por lo tanto, qué servidor de autenticación) utilizar se puede resumir como:

  • Si el valor de la variable de contexto coincide exactamente con el valor de una regla, utilice esa regla.
  • De lo contrario, si el valor de la variable de contexto coincide con el valor de una regla que empieza o termina con un comodín, utilice la primera regla que contenga un comodín que coincida.
  • De lo contrario, si se especifica una regla como regla por defecto, utilice esa regla.
  • De lo contrario, devolverá una respuesta de error 401 Unauthorized.

Uso de la consola para agregar varios servidores de autenticación al mismo despliegue de API

Para agregar varios servidores de autenticación para el mismo despliegue de API a una especificación de despliegue de API mediante la consola:

  1. Cree o actualice un despliegue de API con la consola, seleccione la opción Desde cero e introduzca los detalles en la página Información básica.

    Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.

  2. Seleccione Siguiente para mostrar la página Autenticación.
  3. Seleccione Autenticación múltiple para especificar que desea que las solicitudes de autenticación se enruten a diferentes servidores de autenticación, según la variable de contexto y las reglas que introduzca:
    1. En la lista Selector, seleccione la tabla de contexto (que contiene la variable de contexto) que se utilizará al determinar el servidor de autenticación al que enviar la solicitud de autenticación, de la siguiente manera:
      • Autenticación: utilice el valor de una reclamación incluida en un JWT (y guardada en la tabla de contexto request.auth) para determinar el servidor de autenticación. Tenga en cuenta que si selecciona Autenticación, debe especificar servidores de autenticación de tipo JSON Web Token (JWT) para todas las reglas de servidor de autenticación en el despliegue de API. Si selecciona Autenticación en la lista Selector, también debe tener en cuenta que la ubicación de los JWT debe ser la misma para todos los servidores de autenticación de JSON Web Token (JWT) (ya sea la misma cabecera de solicitud y esquema de autorización, o el mismo parámetro de consulta).
      • Cabeceras: utilice el valor de una cabecera de la solicitud original (y guardada en la tabla de contexto request.headers) para determinar el servidor de autenticación.
      • Host: utilice el nombre del host al que se ha enviado la solicitud original (extraído del campo de host de la cabecera Host en la solicitud y guardado en la tabla de contexto request.host) para determinar el servidor de autenticación.
      • Ruta: utilice un parámetro de ruta de la solicitud original (y guardado en la tabla de contexto request.path) para determinar el servidor de autenticación.
      • Parámetros de consulta: utilice el valor de un parámetro de consulta de la solicitud original (y guardado en la tabla de contexto request.query) para determinar el servidor de autenticación.
      • Subdominio: utilice la parte inicial del nombre de host al que se envió la solicitud original (solo esa parte del nombre de host no especificada como clave y guardada en la tabla de contexto request.subdomain) para determinar el servidor de autenticación. Tenga en cuenta que la clave es la parte final del nombre de host que no se debe utilizar.
    2. En función de la tabla de contexto seleccionada, introduzca el nombre de la clave que se va a utilizar al determinar el servidor de autenticación al que se va a enviar la solicitud de autenticación.
  4. Seleccione Definir política para introducir una regla para la variable de contexto que, si se cumple, enruta la solicitud de autenticación al servidor de autenticación definido.
  5. Introduzca los detalles de la regla del servidor de autenticación de la siguiente manera:
    • Nombre: introduzca un nombre para la regla del servidor de autenticación. Utilice el nombre que introduzca para identificar el servidor de autenticación al hacer referencia a logs y métricas. El nombre debe ser único en todas las reglas del servidor de autenticación definidas para el despliegue de API.
    • Tipo de coincidencia: especifique la precisión con la que el valor de la variable de contexto debe coincidir con un valor que introduzca para que la solicitud se direccione a este servidor de autenticación. Seleccione Cualquiera de si la variable de contexto debe coincidir exactamente con el valor del campo Valores. Seleccione Comodín si la variable de contexto debe coincidir con un valor del campo Expresión que contenga comodines. La coincidencia de valores no distingue entre mayúsculas y minúsculas si selecciona Cualquiera de y si selecciona Comodín.
    • Valores: (se muestra si ha seleccionado Cualquiera de en el campo Tipo de coincidencia). Especifique un valor (o varios valores en una lista separada por comas) que la variable de contexto debe coincidir exactamente. Tenga en cuenta que la coincidencia no distingue entre mayúsculas y minúsculas si ha seleccionado Cualquiera de. Tenga en cuenta también que los valores deben ser únicos en una única regla de servidor de autenticación y en todas las reglas de servidor de autenticación definidas para el despliegue de API.
    • Expresión: (se muestra si ha seleccionado Comodín en el campo Tipo de coincidencia) Especifique un valor que empiece por o termine por un comodín que la variable de contexto debe coincidir. Utilice el comodín * (asterisco) para indicar cero o más caracteres y/o el comodín + (signo más) para indicar uno o más caracteres. Tenga en cuenta que la coincidencia distingue entre mayúsculas y minúsculas si ha seleccionado Comodín. Tenga en cuenta que no puede incluir más de un comodín en un valor y no puede incluir un comodín en el medio de un valor.
    • Convertir en valor por defecto: especifique si desea utilizar el servidor de autenticación definido para esta regla si ninguna otra regla del servidor de autenticación coincide con el valor de la variable de contexto. Solo puede especificar una regla de servidor de autenticación como valor por defecto para un despliegue de API. Si no se marca ninguna regla como valor por defecto y el valor de la variable de contexto en una solicitud entrante no coincide con ninguna regla del servidor de autenticación definida para un despliegue de API, la solicitud devuelve una respuesta de error 401 Unauthorized.
  6. Seleccione o anule la selección de la casilla de control Activar acceso anónimo para especificar si los usuarios finales no autenticados (es decir, anónimos) pueden acceder a rutas en el despliegue de API.

    Por defecto, esta opción no está seleccionada. Si desea que los usuarios anónimos no puedan acceder a rutas, no seleccione esta opción. Tenga en cuenta que si selecciona esta opción, también deberá especificar explícitamente cada ruta en la que se permite el acceso anónimo, seleccionando Anónimo como Tipo de autorización en la política de autorización de cada ruta.

  7. Introduzca los detalles para el servidor de autenticación de la siguiente manera:
    1. En el campo Tipo de autenticación, seleccione Token web JSON (JWT) o Función de autorizador como servidor de autenticación al que enrutar la solicitud de autenticación si se cumple la regla introducida.

      Tenga en cuenta que si ha seleccionado Autenticación en la lista Selector, debe seleccionar JSON Web Token (JWT) como tipo de servidor de autenticación. Si seleccionó Autenticación en la lista Selector, también tenga en cuenta que la ubicación de los JWT debe ser la misma para todos los servidores de autenticación de JSON Web Token (JWT) (ya sea la misma cabecera de solicitud y el mismo esquema de autorización, o el mismo parámetro de consulta).

    2. Introduzca los detalles del servidor de autenticación seleccionado. Los detalles que se deben introducir dependerán del tipo de servidor de autenticación seleccionado:
    3. Seleccione Definir para crear el servidor de autenticación y la regla asociada.
  8. Opcionalmente, vuelva a seleccionar Definir política para definir servidores de autenticación adicionales y reglas asociadas.
  9. Seleccione Siguiente para introducir detalles de rutas individuales en el despliegue de API en la página Rutas.
  10. Seleccione Guardar cambios y, a continuación, seleccione Siguiente para revisar los detalles introducidos para el despliegue de API.
  11. Seleccione Crear o Guardar cambios para crear o actualizar el despliegue de API.
  12. (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.

Edición de un archivo JSON para agregar varios servidores de autenticación al mismo despliegue de API

Para agregar varios servidores de autenticación para el mismo despliegue de API a una especificación de despliegue de API en un archivo JSON:

  1. Con el editor de JSON de su elección, cree una nueva especificación de despliegue de API (consulte Creación de una especificación de despliegue de API) con el formato:

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

    donde:

    • "dynamicAuthentication" especifica que desea que el gateway de API seleccione dinámicamente qué servidor de autenticación utilizar para autenticar solicitudes, en función de un elemento de la solicitud.
    • "selector": "<context-table-key>" especifica la tabla de contexto (y la clave, si procede) a partir de la cual se obtiene el valor de variable de contexto que determina el servidor de autenticación al que se enviarán las solicitudes de autenticación, de la siguiente forma:
      • request.auth[<key>] Utilice el valor de una reclamación incluida en un token web JSON (JWT) para determinar el servidor de autenticación. <key> es el nombre de la reclamación. Por ejemplo, request.auth[tenant]. Tenga en cuenta que si especifica request.auth[<key>], debe especificar servidores de autenticación de tipo JWT_AUTHENTICATION para todas las reglas del servidor de autenticación en el despliegue de API. Si especifica request.auth[<key>], tenga en cuenta también que la ubicación de los JWT debe ser la misma para todos los servidores de autenticación (ya sea la misma cabecera de solicitud y esquema de autorización o el mismo parámetro de consulta).
      • request.headers[<key>] Utilice el valor de una cabecera de la solicitud original para determinar el servidor de autenticación. <key> es el nombre de la cabecera. Por ejemplo, request.headers[Accept]
      • request.host Utilice el nombre del host al que se ha enviado la solicitud original (extraído del campo de host de la cabecera Host en la solicitud) para determinar el servidor de autenticación.
      • request.path[<key>] Utilice un parámetro de ruta de acceso de la solicitud original para determinar el servidor de autenticación. <key> es el nombre del parámetro de ruta de acceso. Por ejemplo, request.path[region]
      • request.query[<key>] Utilice el valor de un parámetro de consulta de la solicitud original para determinar el servidor de autenticación. <key> es el nombre del parámetro de consulta. Por ejemplo, request.query[state]
      • request.subdomain[<key>] Utilice la parte inicial del nombre de host al que se ha enviado la solicitud original (solo esa parte del nombre de host no especificada como clave) para determinar el servidor de autenticación. Tenga en cuenta que <key> es la parte final del nombre de host que no se va a utilizar. Por ejemplo, request.subdomain[example.com]
    • "type": "SINGLE" especifica que desea utilizar una única variable de contexto para seleccionar dinámicamente el servidor de autenticación.
    • "key": {...} especifica la regla que se debe cumplir para enviar una solicitud al servidor de autenticación especificado por "authenticationServerDetail": {…}.
    • "type": "<ANY_OF|WILDCARD>" especifica el grado de coincidencia entre el valor de la variable de contexto identificada por <context-table-key> y el valor introducido para <context-variable-value> para que la solicitud se envíe al servidor de autenticación especificado por "authenticationServerDetail": {…}. Especifique ANY_OF si el valor de la variable de contexto identificada por <context-table-key> debe coincidir exactamente con el valor especificado para <context-variable-value>. Especifique WILDCARD si el valor de la variable de contexto identificada por <context-table-key> debe coincidir con un valor que contenga comodines que especifique para <context-variable-value>. La coincidencia de valores no es sensible a mayúsculas/minúsculas si especifica ANY_OF y sensible a mayúsculas/minúsculas si especifica WILDCARD.
    • <context-variable-value> es un valor que posiblemente coincida con el valor de la variable de contexto identificada por <context-table-key>. Puede incluir varias entradas "<context-variable-value>" en la matriz values:[...], separadas por comas. La solicitud se envía al servidor de autenticación especificado por "authenticationServerDetail": {…} si los valores coinciden, de la siguiente manera:
      • Si ha especificado "type": "ANY_OF", los valores deben coincidir exactamente. Tenga en cuenta que los valores deben ser únicos en una única regla del servidor de autenticación y en todas las reglas del servidor de autenticación definidas para un despliegue de API. La coincidencia de valores no es sensible a mayúsculas/minúsculas si ha especificado ANY_OF.
      • Si ha especificado "type": "WILDCARD", puede especificar un valor para <context-variable-value> que empiece por, o termine por, un comodín. Utilice el comodín * (asterisco) para indicar cero o más caracteres y/o el comodín + (signo más) para indicar uno o más caracteres. Tenga en cuenta que no puede incluir más de un comodín en un valor y no puede incluir un comodín en medio de un valor. La coincidencia de valores es sensible a mayúsculas/minúsculas si ha especificado WILDCARD.
      Por ejemplo, si desea que una solicitud de un cliente de API que pueda aceptar una respuesta xml (como se indica en la cabecera Accept de la solicitud) se enrute a un servidor de autenticación concreto, puede especificar:
      • "selector": "request.headers[Accept]"
      • "type": "ANY_OF"
      • "values": ["application/xml"]
    • "isDefault": "<true|false>" es un valor booleano opcional (true o false) que indica si se debe utilizar el servidor de autenticación para esta regla si ninguna otra regla del servidor de autenticación coincide con el valor de variable de contexto. Si no se especifica, se asume "isDefault": "false". Solo puede especificar una regla de servidor de autenticación como valor por defecto para un despliegue de API. Si no se marca ninguna regla como valor por defecto y el valor de variable de contexto en una solicitud entrante no coincide con ninguna regla del servidor de autenticación definida para un despliegue de API, la solicitud devuelve una respuesta de error 401 Unauthorized.
    • "name": "<rule-name>" especifica un nombre para la regla. Utilice este nombre para identificar el servidor de autenticación al hacer referencia a logs y métricas. El nombre debe ser único en todas las reglas del servidor de autenticación definidas para el despliegue de API.
    • "type": "<authentication-server-type>" especifica el tipo de servidor de autenticación. Los valores válidos son JWT_AUTHENTICATION y CUSTOM_AUTHENTICATION. Tenga en cuenta que si ha especificado request.auth[<key>], debe especificar servidores de autenticación de tipo JWT_AUTHENTICATION para todas las reglas del servidor de autenticación en el despliegue de API. Si ha especificado request.auth[<key>], tenga en cuenta también que la ubicación de los JWT debe ser la misma para todos los servidores de autenticación (ya sea la misma cabecera de solicitud y esquema de autorización o el mismo parámetro de consulta).
    • "<auth-server-attribute-name>": "<auth-server-attribute-value>" son atributos y valores de atributo para el tipo de servidor de autenticación especificado. Los atributos y valores de atributo que se deben introducir dependerán del tipo de servidor de autenticación especificado:

    Por ejemplo, la siguiente especificación de despliegue de API incluye la selección del servidor de autenticación dinámica que maneja las solicitudes de autenticación según el valor del parámetro de consulta vehicle-type transferido en la solicitud. Para obtener una explicación más detallada de este ejemplo, consulte el Example 1: Select JWT or serverless function as authentication server using a query parameter (incluyendo la selección de comodines y el valor por defecto).

    {
      "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. Guarde el archivo JSON que contiene la especificación de despliegue de API.
  3. Utilice la especificación de despliegue de API al crear o actualizar un despliegue de API de las siguientes formas:

    • Especificando el archivo JSON en la consola al seleccionar la opción Cargar API existente.
    • Especificando el archivo JSON en una solicitud para la API REST de gateway de API.

    Para obtener más información, consulte Despliegue de una API en un gateway de API mediante la creación de un despliegue de API y Actualización de un gateway de API.

  4. (Opcional) Confirme que la API se ha desplegado correctamente llamándola. Para ello, consulte Llamada a una API desplegada en un gateway de API.

Ejemplos

Ejemplo 1: Selección de JWT o función sin servidor como servidor de autenticación mediante un parámetro de consulta (incluida la selección de comodines y el valor por defecto)

En este ejemplo, el gateway de API determina el servidor de autenticación al que enviar la solicitud de autenticación según el valor del parámetro de consulta vehicle-type transferido en la solicitud. Si el parámetro de consulta vehicle-type tiene el valor car, el JWT de la cabecera de autorización de la solicitud se valida mediante la recuperación de claves de verificación públicas del proveedor de identidad https://recommend-app.eu.auth0.com. Si el parámetro de consulta vehicle-type tiene un valor que empieza por mini, se envía una solicitud de autenticación a una función sin servidor en OCI Functions para su procesamiento. Si el valor del parámetro de consulta vehicle-type no es car ni mini*, el gateway de API asume por defecto que hay un JWT en la cabecera de autorización de la solicitud e intenta validarlo recuperando claves de verificación públicas del proveedor de identidad 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"
          },
          "authenticationServerDetail": {
            "type": "CUSTOM_AUTHENTICATION",
            "functionId": "ocid1.fnfunc.oc1.iad.aaaaaaaaac______dfa",
            "isAnonymousAccessAllowed": true
          }
        }
      ]
    }
  },
  "routes": []
}

Ejemplo 2: Selección del servidor de autenticación JWT mediante reclamaciones de tokens JWT

En este ejemplo, el gateway de API determina el servidor de autenticación al que se enviará la solicitud de autenticación según la reclamación tenant en un token de JWT transferido en la cabecera Authorization de la solicitud. Dos tokens de JWT de ejemplo siguen la especificación de despliegue de 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": []
}

Al autenticar una solicitud que tiene el siguiente token de JWT en la cabecera Authorization, el gateway de API recupera el juego de claves web JSON (JWKS) para verificar la firma de 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"
}

Al autenticar una solicitud que tiene el siguiente token de JWT en la cabecera Authorization, el gateway de API recupera el juego de claves web JSON (JWKS) para verificar la firma de 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"
}