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

Mensagem de erro

It is required that you pass in a value for the "algorithms" argument when calling decode().

PyJWT (Python) — jwt.exceptions.DecodeError

O que significa

Desde o PyJWT 2.0, jwt.decode() se recusa a rodar sem uma lista explícita de algoritmos. Isso não é preciosismo: derivar o algoritmo do próprio cabeçalho do token possibilita ataques de confusão de algoritmo (por exemplo, verificar um token HS256 usando uma chave pública RSA como segredo HMAC). O verificador — configurado no lado do servidor, fora do alcance do atacante — deve declarar o que aceita, e o PyJWT impõe esse contrato no nível da API, de modo que a forma insegura da chamada simplesmente não pode ser escrita.

Por que acontece

Como corrigir

  1. 1.

    Declarar o algoritmo explicitamente

    Passe exatamente o algoritmo (ou os algoritmos) que seu emissor usa — para tokens assinados com ECDSA, normalmente ES256. Se vários tipos de token passam por um mesmo serviço, dê a cada emissor a própria lista de algoritmos permitidos, em vez de juntar todos em uma única lista permissiva.

    python
    import jwt
    
    payload = jwt.decode(
        token,
        public_key_pem,
        algorithms=["ES256"],       # required — and a security control, not boilerplate
        audience="api://orders",
    )
  2. 2.

    Para inspeção sem verificação, deixar isso explícito

    Se você só precisa ler as claims (depuração, logs), desative a verificação de forma deliberada — e nunca use o resultado em decisões de autorização.

    python
    claims = jwt.decode(token, options={"verify_signature": False})
    # or just the header:
    header = jwt.get_unverified_header(token)

Erros relacionados

Ver toda a base de erros de assinatura