web-dev-qa-db-fra.com

JWT codant en utilisant HMAC avec une clé asymétrique comme secret

J'exploite actuellement la vulnérabilité discutée ici

https://auth0.com/blog/2015/03/31/critique-vulnérabilités-in-json-web-Token-Libraires/

Lorsque le type d'algorithme dans JWT peut être changé de RSA en HMAC et signer le jeton avec une clé publique donnée.

Cependant, j'ai écrit le ci-dessous python code:

import jwt
import base64

# consider 'publickey' as the servers public key
code = 
jwt.encode({'login':'test'},'publickey',algorithm='HS256')

Cela jette une erreur:

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

Je cherche une alternative où je peux le signer avec succès à l'aide de la clé asymétrique.

Merci

4
Goron

Utilisez une ancienne version de Pyjwt (0.4.3) où cette exception n'a pas encore été mise en œuvre.

pip install pyjwt==0.4.3
6
Sjoerd

Lors de l'exécution de votre programme, il indique la ligne qui jette l'exception:

  File "/some-path/site-packages/jwt/algorithms.py", line 151, in prepare_key
    'The specified key is an asymmetric key or x509 certificate and'
jwt.exceptions.InvalidKeyError: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

Donc, éditez le fichier /some-path/site-packages/jwt/algorithms.py autour de la ligne 151, de sorte qu'il ne jette plus l'exception.

Par exemple, mettez ceci là-dessus:

invalid_strings = []
0
Sjoerd