Quando um aplicativo cliente inclui um Token da Web JSON (JWT, na sigla em inglês) em uma solicitação para uma API, o Extensible Service Proxy (ESP) valida o JWT antes de enviar a solicitação ao back-end da API. Nesta página, você verá informações sobre solução de problemas para o caso de a validação do JWT falhar e o ESP retornar um erro na resposta ao cliente. Consulte a RFC 7519 para saber mais sobre JWTs.
Erro:BAD_FORMAT
Verifique se:
- Verifique se o JWT contém um JSON válido.
- Verifique se o cabeçalho do JWT tem o campo
"alg"
e está definido como um dos seguintes:"RS256"
,"HS256"
,"RS384"
,"HS384"
,"RS512"
ou"HS512"
. - Verifique o tipo de dados dos seguintes campos, se eles estiverem presentes, no payload do JWT:
- As declarações
"iat"
(emitido em),"exp"
(prazo de validade) e"nbf"
(não antes de) são números maiores que 0, e não strings. - Os campos
"sub"
(assunto),"iss"
(emissor) e"jti"
(ID do JWT) são strings. - A declaração
"aud"
(público) precisa ser uma string ou uma matriz de strings. - Confira se as declarações a seguir estão presentes no payload do JWT:
"sub"
(assunto),"iss"
(emissor) e"aud"
(público).
A seguir, você encontra um exemplo de token decodificado do JWT válido:
{ "alg": "RS256", "typ": "JWT", "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a" } Payload: { "iss": "myservice@myproject.iam.gserviceaccount.com", "iat": 1493833746, "aud": "myservice.appspot.com", "exp": 1493837346, "sub": "myservice@myproject.iam.gserviceaccount.com" }Erro:
TIME_CONSTRAINT_FAILURE
Use jwt.io para decodificar o JWT e verifique o seguinte:
- Se a declaração
"exp"
(prazo de validade) existe. - Se o valor da declaração
"exp"
(prazo de validade) é uma data/hora posterior à atual. A data/hora atual precisa ser anterior à listada na declaração"exp"
. - Se a declaração
"nbf"
(não antes de), caso presente, é uma data/hora anterior à atual. A data/hora atual precisa ser posterior ou igual à data/hora listada na declaração"nbf"
.
UNKNOWN
Use jwt.io para decodificar o JWT e verifique o seguinte:
- Se a declaração
"iss"
(emissor) for um endereço de e-mail, as declarações"sub"
(assunto) e"iss"
terão que ser iguais. Isso garante que o JWT seja autoemitido para emissores por e-mail.
Erro: KEY_RETRIEVAL_ERROR
- Verifique se o URI de chave pública, especificado no campo
jwks_uri
da seçãoauthentication: providers
do arquivo de configuração.yaml
do gRPC, está correto e é válido.
Erro: Issuer not allowed
- Verifique se a declaração
"iss"
(emissor) no token JWT corresponde ao campoissuer
da seçãoauthentication: providers
do arquivo de configuração.yaml
do gRPC.
Erro: Audience not allowed
Se a declaração "aud"
(público) em um token JWT corresponder ao nome do serviço do Endpoints, o ESP validará o público e ignorará os valores audiences
no arquivo de configuração .yaml
do gRPC. Por exemplo, se o nome do serviço é "myservice.endpoints.example-project-12345.cloud.goog"
, um JWT com "aud"
definido como "myservice.endpoints.example-project-12345.cloud.goog"
ou "https://myservice.endpoints.example-project-12345.cloud.goog"
é um público válido.
Se a declaração "aud"
não for igual ao nome do serviço do Endpoints:
- Verifique se a declaração
"aud"
no JWT corresponde a um dos valores deaudiences
especificados na seçãoauthentication: providers
do arquivo de configuração.yaml
do gRPC.