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 símbolo 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 no campo x-google-jwks_uri
da 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)
-
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:
Configurar o API Gateway para suportar a autenticação de clientes
Tem de ter um objeto security requirement e um objeto security definitions na configuração da API para que o API Gateway valide as reivindicações no JWT assinado.
Para suportar a autenticação do Firebase:
Adicione o seguinte à definição de segurança na configuração da API, que segue o esquema de segurança 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"
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.
Fazer 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 --request POST \ --header "Authorization: Bearer ${TOKEN}" \ "${GATEWAY_URL}/echo"
Aqui, GATEWAY_URL
e TOKEN
são variáveis de ambiente que contêm o URL do gateway implementado e o 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}/echo?access_token=${TOKEN}"
Receber 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 gateway da API 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.