Usar JWT 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 a documentação do fornecedor de autenticaçã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:
    • 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 JWT:

OpenAPI 2.0

  1. Adicione o seguinte à configuração da API:
    securityDefinitions:
      your_custom_auth_id:
        authorizationUrl: ""
        flow: "implicit"
        type: "oauth2"
        # The issuer value should be unique
        x-google-issuer: "ISSUER"
        x-google-jwks_uri: "URL_PUBLIC_KEY"
        # Optional.
        x-google-audiences: "CLIENT_ID"

    Onde:

    • ISSUER é o emissor do token.
    • URL_PUBLIC_KEY é o URL da chave pública.
    • CLIENT_ID é o ID de cliente.
  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:
      - your_custom_auth_id: []

OpenAPI 3.x

  1. Adicione o seguinte à configuração da API:
    components:
      securitySchemes:
        SCHEME_NAME:
          type: oauth2
          flows:
           implicit:
             authorizationUrl: ""
             scopes: {}
          x-google-auth:
            issuer: ISSUER
            jwksUri: URL_PUBLIC_KEY
            # Optional. Replace CLIENT_ID with your client ID(s) as a list of strings.
            audiences:
              - CLIENT_ID
            jwtLocations:
              - header: Authorization
                valuePrefix: "Bearer "

    Onde:

    • ISSUER é o emissor do token.
    • URL_PUBLIC_KEY é o URL da chave pública.
    • CLLIENT_ID é uma lista de IDs de clientes como strings.
  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:
      - SCHEME_NAME: []

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.

O campo x-google-jwks_uri (OpenAPI 2.0) ou jwksUri (OpenAPI 3.x)