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

Mensagem de erro

The specified alg value is not allowed

Também aparece como

  • jwt.exceptions.InvalidAlgorithmError: The specified alg value is not allowed

PyJWT (Python) — jwt.exceptions.InvalidAlgorithmError

O que significa

O `alg` do cabeçalho do token não está na lista `algorithms` que você passou para `jwt.decode()`. O PyJWT confere isso antes de verificar a assinatura, porque o cabeçalho é escolhido por quem produziu o token e não deve decidir como ele é verificado. O token pode estar corretamente assinado — só que com um algoritmo que você não permitiu.

Por que acontece

Como corrigir

  1. 1.

    Ler o cabeçalho primeiro

    `jwt.get_unverified_header()` mostra `alg` e `kid` sem confiar em nada. Compare o resultado com sua lista de algoritmos permitidos e com as chaves que seu emissor publica.

    python
    print(jwt.get_unverified_header(token))  # {'alg': 'ES256', 'kid': '...', 'typ': 'JWT'}
  2. 2.

    Permitir exatamente o algoritmo do emissor

    Coloque em `algorithms` o algoritmo que seu emissor usa e resolva as chaves a partir do JWKS dele. Durante uma migração, liste os dois algoritmos, cada um associado à própria chave pelo `kid`.

    python
    from jwt import PyJWKClient
    
    jwks = PyJWKClient("https://issuer.example.com/.well-known/jwks.json")
    signing_key = jwks.get_signing_key_from_jwt(token)
    claims = jwt.decode(
        token,
        signing_key.key,
        algorithms=["ES256"],  # the algorithm(s) your issuer actually uses, never the token's own header
        audience="https://api.example.com",
    )

Erros relacionados

Ver toda a base de erros de assinatura