Mensagem de erro
Audience doesn't match
Também aparece como
- jwt.exceptions.InvalidAudienceError: Audience doesn't match
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
O que significa
O token tem a claim `aud`, e você passou `audience=` para `jwt.decode()`, mas nenhum valor coincide. O PyJWT aceita o token quando pelo menos um dos públicos-alvo do token é igual a um dos públicos-alvo que você permite; aqui, nenhum era. A assinatura era válida — o token foi emitido para outro destinatário.
Por que acontece
O token foi emitido para outra API
comumCom um único provedor de identidade na frente de vários serviços, um cliente pode facilmente enviar ao serviço B um token emitido para o serviço A. Rejeitá-lo é o propósito da verificação do público-alvo.
Grafia diferente do mesmo identificador
comumA comparação de strings é exata: uma barra no final, `http` versus `https`, um ID de cliente versus a URL que identifica a API ou letras maiúsculas — tudo isso conta como públicos-alvo diferentes.
Um token de ID chegou à API
ocasionalOs tokens de ID do OpenID Connect trazem em `aud` o ID do aplicativo cliente. Uma API deveria receber tokens de acesso emitidos para ela; o encaminhamento do token de ID falha aqui.
Como corrigir
- 1.
Comparar o aud do token com o seu público-alvo
Decodifique sem verificação só para inspecionar e, depois, verifique com o identificador exato. Altere a requisição de token do cliente se o token foi emitido para o público-alvo errado; altere o verificador se o identificador foi escrito errado.
python unverified = jwt.decode(token, options={"verify_signature": False}) print(repr(unverified.get("aud"))) # str or list[str] claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com/orders", # must equal one of the token's aud values issuer="https://issuer.example.com/", ) - 2.
Permitir vários identificadores explicitamente
`audience` aceita uma lista. Use-a quando uma API tem legitimamente vários identificadores; nunca passe `options={"verify_aud": False}` para fazer o erro sumir.
python # Any one of these may appear in the token's aud. claims = jwt.decode(token, signing_key, algorithms=["ES256"], audience=["orders-api", "https://api.example.com/orders"])