Falha na validação do token porque as reivindicações do token não correspondem à política de implantação

Descubra como diagnosticar e solucionar problemas de incompatibilidades de reivindicação de validação de token ao chamar APIs, tendo criado com sucesso gateways de API e implantações de API com o serviço API Gateway.

Se o Gateway de API rejeitar uma solicitação durante a validação do token, as reivindicações do token poderão não corresponder à política de autenticação da implantação. O token pode estar presente e bem formado, mas a validação ainda falhará se o emissor, o público, o tempo de expiração ou as reivindicações personalizadas necessárias não corresponderem à política de rota.

Sintomas do Problema

Você pode ver um ou mais dos seguintes sintomas:

  • A solicitação é rejeitada durante a autenticação, mesmo que a solicitação inclua um token formatado corretamente.
  • O payload do token parece válido depois que você o decodifica, mas o Gateway de API ainda nega a solicitação.
  • Falha na autenticação com erros de validação de reivindicação para aud, iss, exp ou valor de reivindicação personalizado necessário.
  • O mesmo aplicativo é bem-sucedido com um token e falha com outro token de um emissor, público ou ambiente diferente.

Possíveis Causas

Esse problema pode ter uma ou mais das seguintes causas:

  • A reivindicação aud do token não corresponde ao público-alvo configurado para a implantação.
  • A reivindicação iss do token não corresponde ao emissor configurado.
  • A política de autenticação requer uma reivindicação personalizada que está ausente do token.
  • A política de autenticação requer um valor de reivindicação personalizado que não corresponda ao token.
  • O token expirou ou os valores de tempo do token estão fora da permissão de alteração de relógio configurada.
  • Para validação baseada em descoberta ou em introspecção, o conjunto de reivindicações retornado não atende à política de implantação.

Revisar a Política de Autenticação

Revise a política de autenticação da rota que tratou a solicitação e verifique as seguintes definições:

  • authentication.audiences contém o público para o qual o token foi emitido.
  • authentication.issuers contém o provedor de identidades que emitiu o token.
  • verifyClaims inclui apenas as reivindicações e os valores que a rota deve impor.
  • O maxClockSkewInSeconds contabiliza a diferença de tempo esperada entre o emissor do token e os sistemas que validam a solicitação.

Se a falha estiver relacionada ao tempo, compare o valor exp do token com o horário UTC atual e a permissão de desvio de relógio configurada.

Revisar Mensagens de Log

Revise o log de execução do Gateway de API no Logging para obter a solicitação com falha. Use o ID da solicitação da resposta para localizar a entrada de log correspondente.

Procure eventos de falha de autenticação, como os seguintes eventos:

  • jwtAuthentication.authenticationFailed
  • tokenAuthentication.authenticationFailed

Em seguida, revise a mensagem de log para a validação da reivindicação com falha. A mensagem pode identificar a reivindicação ou o valor que não atendeu à apólice.

  • Validation failed for 'exp' claim.
  • JWT token not issued by the configured issuers.
  • JWT token not issued for the configured audience.
  • JWT token missing required claim '<claim>'.
  • JWT token does not have the expected claim value for '<claim>'.

Validar as Reivindicações de Token

Use o método de validação que corresponde ao tipo de token.

Para um JWT (JSON Web Token), decodifique o payload e compare as reivindicações relevantes com a configuração de implantação. Verifique o aud, o iss, o exp e os valores de reivindicação personalizados obrigatórios.

import base64
import json

token = "<paste-jwt-here>"
payload = token.split(".")[1]
payload += "=" * (-len(payload) % 4)
print(json.dumps(json.loads(base64.urlsafe_b64decode(payload)), indent=2))

Para um token opaco, chame o ponto final de introspecção configurado diretamente. Compare os valores retornados aud, iss, exp e de reivindicação personalizada com a política de implantação do Gateway de API.

curl -sS -u "<client-id>:<client-secret>" \
 -H "Content-Type: application/x-www-form-urlencoded" \
 -d "token=<paste-token-here>" \
 "https://<identity-provider>/oauth2/v1/introspect"

Valide o token em relação à implantação exata e à configuração de rota que tratou a solicitação com falha.

Corrigir divergências de pedido de indenização

Aplique a correção que corresponde à verificação de validação com falha:

  • Se o público-alvo estiver errado, atualize authentication.audiences ou use um token emitido para o público-alvo esperado.
  • Se o emissor estiver errado, atualize authentication.issuers ou use um token do provedor de identidades esperado.
  • Se uma reivindicação personalizada obrigatória estiver ausente, atualize o processo de emissão de token ou atualize verifyClaims para corresponder ao requisito pretendido.
  • Se uma reivindicação personalizada obrigatória tiver o valor incorreto, corrija o valor da reivindicação de token ou atualize o valor esperado em verifyClaims.
  • Se o token expirar, repita a solicitação com um token válido.
  • Se a falha for causada pela defasagem do relógio, ajuste maxClockSkewInSeconds somente quando a diferença de tempo for esperada e aceitável para seus requisitos de segurança.

Verificar Validação de Token

Depois de atualizar a política ou tentar novamente a solicitação com um token corrigido, verifique o resultado:

  • Envie a mesma solicitação novamente.
  • Confirme se a implantação aceita a solicitação.
  • Confirme se o log de execução não mostra mais a falha na validação da reivindicação.

Para obter mais informações

Para obter mais informações, consulte: