Usar o Firebase para autenticar utilizadores

Esta página descreve como suportar a autenticação de utilizadores no API Gateway.

Para autenticar um utilizador, uma aplicação cliente tem de enviar um token da Web JSON (JWT) no cabeçalho de autorização do pedido HTTP para a sua API de back-end. O API Gateway valida o token em nome da sua API, pelo que não tem de adicionar código na sua API para processar a autenticação. No entanto, tem de configurar a configuração da API para que o seu gateway suporte os métodos de autenticação escolhidos.

O API Gateway valida um JWT de forma eficiente através do conjunto de chaves Web JSON (JWKS) do emissor do JWT. A localização do JWKS é especificada na configuração da API da gateway. O API Gateway armazena em cache o JWKS durante cinco minutos e atualiza-o a cada cinco minutos.

Antes de começar

  • Adicione o código de autenticação à sua aplicação cliente, seguindo a documentação de autenticação do Firebase. O Firebase suporta a autenticação através de palavras-passe, números de telefone e fornecedores de identidade federada populares, como a Google, o Facebook e o Twitter.

  • Quando a sua aplicação cliente envia um pedido HTTP, o cabeçalho de autorização no pedido tem de conter as seguintes reivindicações JWT:
    • iss (emissor)
    • sub (assunto)
    • aud (público-alvo)
    • iat (emitido em)
    • exp (hora de expiração)

Configure o API Gateway para suportar a autenticação de clientes

Tem de ter uma secção de segurança na configuração da API para que o API Gateway valide as reivindicações no JWT assinado. O esquema usado para definir os métodos de segurança depende da versão da especificação OpenAPI que usa.

Para suportar a autenticação do Firebase:

OpenAPI 2.0

  1. Adicione o seguinte à configuração da API:
    securityDefinitions:
       firebase:
          authorizationUrl: ""
          flow: "implicit"
          type: "oauth2"
          # Replace PROJECT_ID with your project ID
          x-google-issuer: "https://securetoken.google.com/PROJECT_ID"
          x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
          x-google-audiences: "PROJECT_ID"
  2. Adicione uma secção de segurança ao nível da API para aplicar a toda a API ou ao nível do método para aplicar a um método específico.
    security:
       -   firebase: []

OpenAPI 3.x

  1. Adicione o seguinte à configuração da API:
    components:
      securitySchemes:
        firebase:
          type: oauth2
          flows:
           implicit:
             authorizationUrl: ""
             scopes: {}
          x-google-auth:
            # Replace PROJECT_ID with your project ID
            issuer: https://securetoken.google.com/PROJECT_ID
            jwksUri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com
            audiences:
              - PROJECT_ID
  2. Adicione uma secção de segurança ao nível da API para aplicar a toda a API ou ao nível do método para aplicar a um método específico.
    security:
      - firebase: []

Pode definir várias definições de segurança na configuração da API, mas cada definição tem de ter um emissor diferente. Se usar secções de segurança ao nível da API e ao nível do método, as definições ao nível do método substituem as definições ao nível da API.

Faça uma chamada autenticada a uma API do API Gateway

Quando envia um pedido através de um token de autenticação, recomendamos que coloque o token no cabeçalho Authorization:Bearer. Por exemplo:

curl -H "Authorization: Bearer TOKEN" "GATEWAY_URL/hello"

Aqui, GATEWAY_URL e TOKEN devem ser substituídos pelo URL do gateway implementado e pelo token de autenticação, respetivamente. Consulte o artigo Fazer um pedido autenticado a uma API do API Gateway para ver um exemplo de código que envia um pedido através do cabeçalho Authorization:Bearer.

Se não puder usar o cabeçalho ao enviar o pedido, pode colocar o token de autenticação num parâmetro de consulta denominado access_token. Por exemplo:

curl "GATEWAY_URL/hello?access_token=TOKEN"

Receba resultados autenticados na sua API

Normalmente, o API Gateway encaminha todos os cabeçalhos que recebe. No entanto, substitui o cabeçalho Authorization original quando o endereço do back-end é especificado por x-google-backend na configuração da API.

O API Gateway envia o resultado da autenticação no cabeçalho X-Apigateway-Api-Userinfo para a API de back-end. Recomendamos que use este cabeçalho em vez do cabeçalho Authorization original. Este cabeçalho está codificado em base64url e contém o payload JWT.

O que se segue?