No Function Compute, você pode configurar a autenticação JSON Web Token (JWT) para um gatilho HTTP. Essa configuração garante que apenas clientes com um JWT válido acessem sua função, aumentando a segurança do serviço HTTP e ajudando a prevenir acessos não autorizados e ataques maliciosos.
Informações de fundo
Visão geral
O Function Compute permite ativar a autenticação JWT para um gatilho HTTP. O JWT, definido na RFC 7519, é um método baseado em token para autenticar requisições. As informações de estado do usuário ficam armazenadas em um token fornecido pelo cliente; assim, a função (servidor) não precisa armazenar esses dados. Isso torna o JWT um método de autenticação adequado para arquiteturas serverless. O Function Compute usa o conjunto de chaves JSON Web Key Set (JWKS) público configurado no gatilho HTTP para autenticar requisições HTTP via JWT. Com base na configuração do gatilho, o Function Compute pode passar os claims como parâmetros para a função. Dessa forma, sua função foca na lógica de negócios em vez de autenticar requisições. Para saber mais sobre o processo e os fundamentos da autenticação por token JWT, consulte Autenticação baseada em token JWT e Introdução ao JWT.
Como funciona a autenticação JWT
A figura anterior ilustra o fluxo de trabalho de autenticação JWT para um gatilho HTTP no Function Compute usando um algoritmo de criptografia assimétrica. As etapas são:
O cliente envia uma requisição de autenticação para um serviço de autorização personalizado. Essa requisição geralmente inclui o nome de usuário e a senha do usuário final.
O serviço de autorização personalizado valida as credenciais da requisição, como nome de usuário e senha. Após validar com êxito, ele usa uma chave privada para gerar um token padrão.
O serviço de autorização personalizado envia uma resposta contendo o token de volta ao cliente. O cliente deve armazenar esse
tokenlocalmente em cache.O cliente envia uma requisição de negócios que inclui o token para o gatilho HTTP.
O gatilho HTTP usa a chave pública configurada para verificar o token na requisição.
Após verificar o token, o gatilho encaminha a requisição para a função protegida.
A função protegida processa a requisição de negócios e retorna uma resposta.
O gatilho HTTP encaminha a resposta de negócios para o cliente.
Pré-requisitos
Crie uma função e um gatilho HTTP. Para obter mais informações, consulte Criar uma função e Criar um gatilho.
Limites
Você pode usar qualquer método para gerar e distribuir JWTs. O Function Compute autentica os JWTs usando o JWKS público configurado para o gatilho.
O Function Compute aceita uma JSON Web Key (JWK) sem
kid(ID da chave).O gatilho pode ler um token de um
headerda requisição, de um parâmetro deQuery(para requisições GET), de um parâmetro de formulário (para requisições POST) ou de umcookie.É possível encaminhar os
claimspara a função como umheader, um parâmetro de formulário (para requisições POST) ou umcookie.-
O Function Compute permite configurar um JWKS para um gatilho HTTP. O sistema pesquisa no JWKS uma JWK pública com um
kidcorrespondente ao dotokene usa essa chave pública para verificar a assinatura dotoken. Um JWKS de gatilho pode ter, no máximo, uma JWK onde okidesteja ausente ou seja uma string vazia.O JWT do Function Compute aceita os seguintes algoritmos.
Algoritmo de assinatura
Valor Alg
RSASSA-PKCS1-V1_5
RS256, RS384, RS512
RSASSA-PSS
PS256, PS384, PS512
Curva Elíptica (ECDSA)
ES256, ES384, ES512
HMAC
HS256, HS384, HS512
EdDSA
EdDSA
ImportanteO algoritmo de assinatura HMAC usa criptografia simétrica e é menos seguro. Recomendamos o uso de um algoritmo de criptografia assimétrica mais seguro.
Ao usar um algoritmo de criptografia assimétrica, por questões de segurança, seu JWT deve conter apenas informações de chave pública. Não inclua informações de chave privada.
Recomendamos o uso de HTTPS para proteger informações sensíveis, como o
tokennas requisições, a fim de evitar vazamento de tokens.
Procedimento
Etapa 1: Configurar a autenticação JWT
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Functions, clique em na função desejada.
Na página de detalhes da função, clique em na aba Trigger. Localize o gatilho HTTP e clique em Modify na coluna Actions.
-
No painel Edit Trigger, configure os seguintes parâmetros e clique em OK.
Em Authentication Method, selecione JWT Authentication.
-
Configure o JWKS.
Para configurar a autenticação JWT em um gatilho HTTP, forneça um JWKS válido. Você pode gerar seu próprio JWKS ou usar uma ferramenta online buscando por "JSON Web Key Generator", como o mkjwk.org. Caso possua uma chave no formato PEM, utilize uma ferramenta como o jwx para convertê-la para o formato JWKS.
Este tópico usa o mkjwk.org para gerar um JWKS como exemplo. Conforme mostrado na figura a seguir, defina Key Use como Signature, Algorithm como RS256 e Show X.509 como Yes, e então clique em Generate. Use a Private Key (① na figura) no seu código para emitir o token JWT; portanto, armazene-a com segurança. Copie o conteúdo da Public Key (② na figura) e cole-o no array
keysda configuração JWKS no console.

O código a seguir apresenta um exemplo de configuração JWKS.
{ "keys": [ { "alg": "RS256", "e": "AQAB", "kty": "RSA", "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ", "use": "sig" } ] } -
Na seção JWT Token Configuration, especifique a localização do
Tokene o nome doToken.A localização do
Tokenaceita Header, Cookie, parâmetros de query (GET) e parâmetros de formulário (POST). Se a localização doTokenestiver definida como Header, também será necessário especificar o Parameter Name e o Remove Prefix. O Function Compute remove o prefixo especificado em Remove Prefix ao obter o token.
-
Na seção JWT Claim Conversion, especifique a localização de passagem do parâmetro, o nome original do parâmetro e o novo nome do parâmetro para a função.
É possível mapear claims para um parâmetro de Header, Cookie ou Form (POST).

-
Defina o modo de correspondência de requisições.
Match All: Todas as requisições HTTP exigem autenticação JWT.
Whitelist Mode: Requisições HTTP para caminhos especificados na Whitelist of Request Paths não exigem autenticação JWT. Todas as outras requisições exigem autenticação JWT.
Blacklist Mode: Requisições HTTP para caminhos especificados na Blacklist of Request Paths exigem autenticação JWT. Todas as outras requisições não exigem autenticação JWT.
Os modos Whitelist Mode e Blacklist Mode aceitam os dois tipos de correspondência a seguir:
-
Correspondência exata
Um caminho de requisição corresponde apenas se for exatamente igual ao caminho configurado. Por exemplo, se você definir a Blacklist of Request Paths como /a, as requisições para /a exigirão autenticação JWT, mas as requisições para /a/ não.
-
Correspondência aproximada
É possível usar um caractere curinga () em um caminho, mas o curinga () deve estar no final do caminho. Por exemplo, se você definir a Blacklist of Request Paths como /login/*, todas as requisições para caminhos com o prefixo /login/, como /login/a e /login/b/c/d, exigirão autenticação JWT.
Etapa 2: Verificar a configuração
Use uma ferramenta de teste, como o Postman, para verificar se o acesso ao serviço HTTP ocorre conforme esperado com base na configuração JWT do gatilho HTTP, fornecendo um endpoint, token e outras informações.
-
Use a chave privada no formato X.509 PEM gerada na Etapa 1 para emitir um token JWT. Os passos a seguir mostram como gerar um token usando um script Python local.
-
Instale o módulo PyJWT.
pip install 'PyJWT>=2.0' -
Execute o seguinte script Python de exemplo localmente para gerar um token JWT.
import jwt import time private_key = """ -----BEGIN PRIVATE KEY----- <The X.509 PEM-format private key generated in Step 1> -----END PRIVATE KEY----- """ headers = { "alg": "RS256", "typ": "JWT" } payload = { "sub": "1234567890", "name": "John Snow", "iat": int(time.time()), # The time when the token was issued. "exp": int(time.time()) + 60 * 60, # Set the token to be valid for 1 hour. } encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers) print("Generated token: %s" % encoded)
-
-
Use o Postman para verificar se o serviço HTTP está acessível.
Na aba Trigger da página de detalhes da função, obtenha o endpoint público do gatilho HTTP e insira-o no campo URL do Postman.
-
No Postman, configure o parâmetro do token nos headers e clique em Send. A tabela a seguir fornece um exemplo da configuração do token.
Parâmetro
Valor
Descrição
Chave
AuthenticationO nome do parâmetro especificado na seção JWT Token Configuration.
Valor
Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLgO valor do parâmetro Remove Prefix especificado na seção JWT Token Configuration, concatenado com o token JWT. O valor de exemplo assume que Remove Prefix está definido como
Bearer.ImportanteO prefixo e o espaço para o parâmetro JWT no header da requisição devem corresponder exatamente ao valor de Remove Prefix especificado na seção JWT Token Configuration. Caso contrário, o gatilho falhará ao analisar o token e retornará um erro
invalid or expired jwt.