Usar o Okta 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 o seu gateway de modo a suportar 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 o guia de integração do Okta para os Google Cloud Endpoints.
-
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.
Conforme explicado no guia de integração do Okta para os Google Cloud Endpoints, faça as seguintes alterações ao seu documento OpenAPI:
OpenAPI 2.0
- Adicione o seguinte à configuração da API:
securityDefinitions: okta_jwt: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://YOUR_OKTA_TENANT_NAME.com" x-google-jwks_uri: "https://YOUR_OKTA_TENANT_NAME.com/oauth2/v1/keys" x-google-audiences: "YOUR_OKTA_CLIENT_ID"
Onde:
- YOUR_OKTA_TENANT_NAME é o nome do seu inquilino do Okta.
- YOUR_OKTA_CLIENT_ID é o ID do cliente que criou no seu inquilino do Okta.
- 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: - okta_jwt: []
OpenAPI 3.x
- Adicione o seguinte à configuração da API:
components: securitySchemes: okta_jwt: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: issuer: https://YOUR_OKTA_TENANT_NAME.com jwksUri: https://YOUR_OKTA_TENANT_NAME.com/oauth2/v1/keys audiences: - YOUR_OKTA_CLIENT_ID
Onde:
- YOUR_OKTA_TENANT_NAME é o nome do seu inquilino do Okta.
- YOUR_OKTA_CLIENT_ID é o ID do cliente que criou no seu inquilino do Okta.
- 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: - okta_jwt: []
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.
O campo x-google-audiences (OpenAPI 2.0) ou o campo audiences (OpenAPI 3.x) não é obrigatório. O API Gateway aceita todos os JWTs com o nome do serviço de back-end no formato https://SERVICE_NAME na reivindicação aud.
Para permitir que IDs de cliente adicionais acedam ao serviço de back-end, pode especificar os IDs de cliente permitidos no campo audiences aplicável. São especificados vários públicos-alvo como valores separados por vírgulas no OpenAPI 2.0 e com uma lista no OpenAPI 3.x. através de valores separados por vírgulas. Em seguida, o API Gateway aceita os JWTs com qualquer um dos IDs de cliente especificados na reivindicação aud.
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.