Autenticar usuarios mediante Auth0

En esta página se describe cómo admitir la autenticación de usuarios en API Gateway.

Para autenticar a un usuario, una aplicación cliente debe enviar un JSON Web Token (JWT) en el encabezado de autorización de la solicitud HTTP a tu API backend. API Gateway valida el token en nombre de tu API, por lo que no tienes que añadir ningún código a tu API para procesar la autenticación. Sin embargo, debes configurar la API de tu pasarela para que admita los métodos de autenticación que hayas elegido.

API Gateway valida un JWT de forma eficiente mediante el conjunto de claves web de JSON (JWKS) del emisor del JWT. La ubicación de JWKS se especifica en el campo x-google-jwks_uri de la configuración de la API de la pasarela. API Gateway almacena en caché el JWKS durante cinco minutos y lo actualiza cada cinco minutos.

Antes de empezar

  • Añade el código de autenticación a tu aplicación cliente siguiendo la documentación de Auth0.

  • Cuando tu aplicación cliente envíe una solicitud HTTP, el encabezado de autorización de la solicitud debe contener las siguientes reclamaciones de JWT:
    • iss (emisor)
    • sub (asunto)
    • aud (audiencia)
    • iat (emitido a las)
    • exp (hora de vencimiento)

Configurar API Gateway para admitir la autenticación de clientes

Debes tener un objeto security requirement y un objeto security definitions en la configuración de tu API para que API Gateway valide las reclamaciones del JWT firmado.

Para admitir la autenticación de Auth0, haz lo siguiente:

  1. Añade lo siguiente a la definición de seguridad de tu configuración de API, que sigue el esquema de seguridad de OpenAPI 2.0:

     securityDefinitions:
        auth0_jwk:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-ACCOUNT-NAME with your Auth0 account name.
          x-google-issuer: "https://YOUR-ACCOUNT-NAME.auth0.com/"
          x-google-jwks_uri: "https://YOUR-ACCOUNT-NAME.auth0.com/.well-known/jwks.json"
          # Optional. Replace YOUR-CLIENT-ID with your client ID
          x-google-audiences: "YOUR-CLIENT-ID"
    
  2. Añade una sección de seguridad a nivel de API para aplicarla a toda la API o a nivel de método para aplicarla a un método específico.

     security:
        - auth0_jwk: []
    

Puedes definir varias definiciones de seguridad en la configuración de la API, pero cada definición debe tener un emisor diferente. Si usas secciones de seguridad tanto a nivel de API como a nivel de método, los ajustes a nivel de método anulan los ajustes a nivel de API.

El campo x-google-audiences no es obligatorio. API Gateway acepta todos los JWTs con el nombre del servicio de backend en forma de https://SERVICE_NAME en la reclamación aud.

Para permitir que otros IDs de cliente accedan al servicio de backend, puede especificar los IDs de cliente permitidos en el campo x-google-audiences mediante valores separados por comas. A continuación, API Gateway acepta los JWTs con cualquiera de los IDs de cliente especificados en la reclamación aud.

Hacer una llamada autenticada a una API de API Gateway

Cuando envíes una solicitud con un token de autenticación, te recomendamos que lo incluyas en el encabezado Authorization:Bearer. Por ejemplo:

curl --request POST \
  --header "Authorization: Bearer ${TOKEN}" \
  "${GATEWAY_URL}/echo"

En este caso, GATEWAY_URL y TOKEN son variables de entorno que contienen la URL de la pasarela implementada y el token de autenticación, respectivamente. Consulta Enviar una solicitud autenticada a una API de API Gateway para ver un ejemplo de código que envía una solicitud mediante el encabezado Authorization:Bearer.

Si no puedes usar el encabezado al enviar la solicitud, puedes incluir el token de autenticación en un parámetro de consulta llamado access_token. Por ejemplo:

curl "${GATEWAY_URL}/echo?access_token=${TOKEN}"

Recibir resultados autenticados en tu API

API Gateway suele reenviar todos los encabezados que recibe. Sin embargo, anula el encabezado Authorization original cuando la dirección del backend se especifica mediante x-google-backend en la configuración de la API.

API Gateway enviará el resultado de la autenticación en el X-Apigateway-Api-Userinfo a la API de backend. Se recomienda usar este encabezado en lugar del encabezado Authorization original. Este encabezado está codificado en base64url y contiene la carga útil del JWT.

Siguientes pasos