Mensagem de erro
Invalid audience
Também aparece como
- jwt.exceptions.InvalidAudienceError: Invalid audience
Compare com “Audience doesn't match”, que significa que você passou `audience`, mas nenhum valor coincidiu.
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
O que significa
O token contém a claim `aud`, mas `jwt.decode()` foi chamada sem o argumento `audience`. O PyJWT não ignora um público-alvo que não consegue verificar: um token que indica o destinatário é rejeitado, a menos que você diga qual destinatário você é. A mesma mensagem aparece se `aud` tiver um tipo inválido (nem string, nem lista de strings).
Por que acontece
O verificador não passa audience
comumUm código escrito para tokens sem `aud` (ou copiado de um exemplo mínimo) quebra assim que o provedor de identidade passa a incluir `aud` — o que a maioria faz em tokens de acesso e em tokens de ID. Passar o público-alvo esperado é a correção prevista.
Um token de ID em vez de um token de acesso
ocasionalAlguns provedores emitem tokens de acesso sem `aud`, mas sempre colocam o ID do cliente no `aud` do token de ID (o Amazon Cognito é um exemplo comum). Um código que funciona com tokens de acesso começa a falhar assim que um cliente envia o token de ID dele.
A claim aud tem um tipo inválido
raraUm emissor que escreve `aud` como número, objeto ou lista com itens que não são strings produz um token que o PyJWT não consegue comparar com nada.
Como corrigir
- 1.
Informar ao PyJWT qual público-alvo você é
Passe o identificador da sua API (ou uma lista de identificadores aceitáveis). Não desative `verify_aud` — é essa verificação que impede que tokens destinados a outros serviços sejam aceitos.
python claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com", # the identifier your API is registered with ) - 2.
Usar a decodificação sem verificação só para inspecionar
`verify_signature: False` desativa todas as verificações, inclusive a do público-alvo. Isso serve para ler `aud` durante a depuração, nunca para autorizar uma requisição.
python # Reading claims without trusting them (debugging, routing) - never for authorization. header = jwt.get_unverified_header(token) claims = jwt.decode(token, options={"verify_signature": False})