web-dev-qa-db-ja.com

秘密鍵を秘密鍵とするHMACを使用したJWTエンコード

私は現在、ここで説明されている脆弱性を悪用しています

https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/

JWTのアルゴリズムタイプをRSAからHMACに変更し、特定の公開鍵でトークンに署名できる場所。

しかし、私は以下を書きましたpythonコード:

import jwt
import base64

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

これはエラーをスローします:

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

非対称キーを使用して正常に署名できる別の方法を探しています。

ありがとう

4
Goron

この例外がまだ実装されていない古いバージョンのpyjwt(0.4.3)を使用してください。

pip install pyjwt==0.4.3
6
Sjoerd

プログラムを実行すると、例外をスローする行が報告されます。

  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.

そのため、151行目あたりの/some-path/site-packages/jwt/algorithms.pyファイルを編集して、例外がスローされないようにします。

たとえば、これをそこに入れます:

invalid_strings = []
0
Sjoerd