Pular para o conteúdo
ecdsa.com
PyJWT (Python)Bibliotecas de JWT

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

Como corrigir

  1. 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. 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"])

Erros relacionados

Ver toda a base de erros de assinatura