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 segundo parâmetro do objeto endpoints.Issuer está correto e é válido.

Erro: Issuer not allowed

  • Verifique se a declaração "iss" (emissor) em seu token do JWT corresponde ao primeiro parâmetro do objeto endpoints.Issuer.

Erro: Audience not allowed

Se a declaração "aud" (público-alvo) em um token do JWT corresponde ao nome do serviço do Endpoints, o Cloud Endpoints Frameworks valida o público-alvo e ignora os valores definidos no argumento audiences no decorador @endpoints.api. Por exemplo, se o nome do serviço for "myservice.appspot.com", um JWT com "aud" definido como "myservice.appspot.com" ou "https://myservice.appspot.com" será um público-alvo 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 no argumento audiences no decorador @endpoints.api.