Autenticar usuarios mediante Firebase

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 autenticación de Firebase. Firebase admite la autenticación mediante contraseñas, números de teléfono y proveedores de identidades federadas populares, como Google, Facebook y Twitter.
    • Cuando tu aplicación cliente envía 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 Firebase, 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:
        firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace YOUR-PROJECT-ID with your project ID
          x-google-issuer: "https://securetoken.google.com/YOUR-PROJECT-ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "YOUR-PROJECT-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:
        - firebase: []
    

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.

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