Saltar al contenido
ecdsa.com
PyJWT (Python)Bibliotecas de JWT

Mensaje de error

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

También se muestra 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

Qué significa

Se pidió a PyJWT que usara un PEM de clave pública, de clave privada o de certificado como secreto de un algoritmo HMAC (HS256/384/512), y se negó. Esta protección existe por una clase de errores de JWT muy conocida: si un verificador acepta algoritmos RS/ES y HS con el mismo argumento de clave, cualquiera que conozca la clave pública podría calcular un HMAC válido sobre un token falsificado. Aquí, el encabezado del token indicaba un algoritmo HMAC que tu lista de permitidos admite.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Permitir una sola familia de algoritmos por clave

    Pasa, junto con la clave pública del emisor, solo los algoritmos asimétricos que este usa, y mantén la verificación HMAC (si es que la necesitas) en una ruta de código separada con su propio secreto aleatorio.

    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")

Errores relacionados

Explorar toda la base de datos de errores de firma