Esta página foi traduzida pela API Cloud Translation.
Switch to English

Solução de problemas da validação do JWT

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 se a validação do JWT falhar e o ESP retornar um erro na resposta ao cliente. Consulte RFC 7519 para saber mais sobre JWTs.

Erro: BAD_FORMAT

Verifique o seguinte:

  • Verifique se o JWT contém um JSON válido.
  • Se o cabeçalho JWT tem o campo "alg" e é 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:
    • Se as declarações "iat" (emitido às), "exp" (prazo de validade) e "nbf" (não antes) são números maiores que 0 e não strings.
    • Se os campos "sub" (assunto), "iss" (emissor) e "jti" (ID do JWT) são strings.
    • Se a declaração "aud" (público-alvo) é uma string ou uma matriz de strings.
  • Certifique-se de que as seguintes declarações estejam presentes no payload do JWT: "sub" (assunto), "iss" (emissor) e "aud" (público-alvo).

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 (em inglês) para decodificar o JWT e verifique o seguinte:

  • A declaração "exp" (prazo de validade) existe.
  • O valor da declaração "exp" (prazo de validade) é uma data e hora no futuro. A data e a hora atuais devem ser anteriores ao prazo de validade e ao horário listados na declaração "exp".
  • A declaração "nbf" (não antes de), se presente, é uma data e um horário no passado. A data e hora atuais devem ser posteriores ou iguais à data e hora listadas na declaração "nbf".
Erro: UNKNOWN

Use jwt.io (em inglês) 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" devem ser as mesmas. Isso garante que o JWT seja autoemitido para emissores por e-mail.

Erro: KEY_RETRIEVAL_ERROR

  • Verifique se o URI da chave pública especificado no campo x-google-jwks_uri no documento da OpenAPI está correto e é válido.

Erro: Issuer not allowed

  • Verifique se a declaração "iss" (emissor) no token JWT corresponde ao campo x-google-issuer na seção securityDefinitions do objeto de segurança em {101. }Documento da OpenAPI.

  • No documento da OpenAPI, verifique se o objeto de segurança está ativado para o método de API invocado.

Consulte o arquivo openapi.yaml de amostra para ver um exemplo de como descrever a segurança no nível do método usando objetos securityDefinition e security.

Erro: Audience not allowed

Compare a declaração "aud" (público-alvo) em um token do JWT para ver se ela corresponde ao nome do serviço do Endpoints, que corresponde ao campo host no documento da OpenAPI.

Se a declaração "aud" e o nome do serviço do Endpoints forem diferentes:

  • Verifique se a declaração "aud" no JWT corresponde a um dos valores x-google-audiences especificados em seu documento da OpenAPI.

  • Certifique-se de que x-google-audiences e x-google-issuer estejam no mesmo objeto securityDefinitions em seu documento da OpenAPI.

Se a declaração "aud" e o nome do serviço do Endpoints forem iguais, o ESP validará o público-alvo e ignorará os valores de x-google-audiences em sua OpenAPI. Por exemplo, se o nome do serviço for "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" será um público-alvo válido.