Como usar tokens do código do Google para autenticar usuários
Nesta página, você verá como oferecer suporte à autenticação de usuários no gateway de API.
Para autenticar um usuário, um aplicativo cliente precisa enviar um token da Web do JSON (JWT, na sigla em inglês) no cabeçalho de autorização da solicitação HTTP para sua API de back-end. O gateway de API valida o token em nome da API, para que você não precise adicionar nenhum código à API para processar a autenticação. No entanto, você precisa configurar a API para que o gateway seja compatível com os métodos de autenticação escolhidos.
O gateway de API valida um JWT de maneira eficiente usando o conjunto de chaves JSON da Web (JWKS) do emissor do JWT. O local do JWKS é especificado na configuração da API do gateway. O Gateway de API armazena em cache o JWKS por cinco minutos e o atualiza a cada cinco minutos.
Antes de começar
- Adicione um código de autenticação ao aplicativo cliente que permita que os usuários façam a autenticação fazendo login com uma Conta do Google. Consulte Autenticar usuários com Contas do Google para mais detalhes.
-
Quando seu aplicativo cliente envia uma solicitação HTTP, o cabeçalho de autorização na solicitação deve conter as seguintes declarações do JWT:
iss(emissor)sub(assunto)aud(público-alvo)iat(emitido em)exp(prazo de validade)
Configurar o gateway de API para dar suporte à autenticação do cliente
É preciso ter uma seção de segurança na configuração da API para que o gateway de API valide as declarações no JWT assinado. O esquema usado para definir os métodos de segurança depende da versão da especificação OpenAPI que você usa.
Para aceitar a autenticação usando um token de código do Google:
OpenAPI 2.0
- Adicione o seguinte à configuração da API:
securityDefinitions: google_id_token: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://accounts.google.com" x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs" # Optional. Replace CLIENT_ID with your client ID x-google-audiences: "CLIENT_ID"
- Adicione uma seção de segurança no nível da API, para ser aplicável a toda a API, ou no nível do método, para ser aplicável a um método específico.
security: - google_id_token: []
OpenAPI 3.x
- Adicione o seguinte à configuração da API:
components: securitySchemes: google_id_token: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: issuer: https://accounts.google.com jwksUri: https://www.googleapis.com/oauth2/v3/certs # Optional. Replace CLIENT_ID with your client ID(s) as a list of strings. audiences: - CLIENT_ID
- Adicione uma seção de segurança no nível da API, para ser aplicável a toda a API, ou no nível do método, para ser aplicável a um método específico.
security: - google_id_token: []
É possível definir várias definições de segurança na configuração da API, mas cada uma delas precisa ter um emissor diferente. Se você usar seções "security" no nível da API e do método, as configurações no nível do método modificarão as configurações no nível da API.
O campo x-google-audiences (OpenAPI 2.0) ou audiences (OpenAPI 3.x) não é obrigatório. A API Gateway aceita todos os JWTs com o nome do serviço de back-end na forma de https://SERVICE_NAME na declaração aud.
Para permitir outros IDs de cliente na lista de permissões de acesso ao serviço de back-end, especifique os IDs de cliente permitidos no campo audiences aplicável. Vários públicos-alvo são especificados como valores separados por vírgulas no OpenAPI 2.0 e com uma lista no OpenAPI 3.x. Em seguida, o gateway de API aceita os JWTs com qualquer um dos
IDs de cliente especificados na declaração aud.
Fazer uma chamada autenticada para uma API do API Gateway
Ao enviar uma solicitação usando um token de autenticação, recomendamos colocá-lo no cabeçalho Authorization:Bearer. Exemplo:
curl -H "Authorization: Bearer TOKEN" "GATEWAY_URL/hello"
Aqui, GATEWAY_URL e TOKEN precisam ser substituídos pelo
URL do gateway implantado e pelo token de autenticação, respectivamente. Consulte Como fazer uma solicitação autenticada para uma API Endpoints. Para o código de amostra que envia uma solicitação usando o cabeçalho Authorization:Bearer.
Se não for possível usar o cabeçalho ao enviar a solicitação, coloque o token de autenticação em um parâmetro de consulta chamado access_token. Exemplo:
curl "GATEWAY_URL/hello?access_token=TOKEN"Receber resultados autenticados na API
A API Gateway geralmente encaminha todos os cabeçalhos que recebe. No entanto, ele substitui o cabeçalho Authorization original quando o endereço de back-end é especificado por x-google-backend na configuração da API.
O gateway de API enviará o resultado da autenticação no X-Apigateway-Api-Userinfo
para a API de back-end. É recomendável usar esse cabeçalho em vez do cabeçalho Authorization original. Esse cabeçalho está codificado em base64url e contém
o payload de JWT.