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

Mensagem de erro

The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

Também aparece como

  • jwt.exceptions.InvalidKeyError: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

PyJWT (Python) — jwt.exceptions.InvalidKeyError from HMACAlgorithm.prepare_key

O que significa

Pediram ao PyJWT que usasse uma chave pública PEM, uma chave privada ou um certificado como segredo de um algoritmo HMAC (HS256/384/512), e ele se recusou. Essa proteção existe por causa de uma classe bem conhecida de bugs de JWT: se um verificador aceita algoritmos RS/ES e HS com o mesmo argumento de chave, qualquer pessoa que conheça a chave pública poderia calcular um HMAC válido sobre um token forjado. Aqui, o cabeçalho do token indicou um algoritmo HMAC que sua lista de algoritmos permitidos aceita.

Por que acontece

Como corrigir

  1. 1.

    Permitir uma única família de algoritmos por chave

    Passe, junto com a chave pública do emissor, apenas os algoritmos assimétricos que ele usa, e mantenha a verificação HMAC (se é que você precisa dela) em um caminho de código separado, com o próprio segredo aleatório.

    python
    # Asymmetric issuer: allow only asymmetric algorithms with the public key.
    claims = jwt.decode(token, public_key, algorithms=["ES256"], audience="https://api.example.com")
    
    # Shared-secret tokens: a random secret, never a PEM, and only HMAC algorithms.
    claims = jwt.decode(token, HMAC_SECRET, algorithms=["HS256"], audience="internal")

Erros relacionados

Ver toda a base de erros de assinatura