2017-12-19 11 views
0

Auth0から取得するJWTのデコードを試みています。 jwt.ioに行くと、JWTを置くことができるデコーダがあり、JWTの各セクションに関するすべての情報が表示されます。すべての情報が正しいことがわかります。私は自分自身でそれを解読しようとすると、私はこのエラーを取得します。 Auth0の登録されたクライアント情報から秘密鍵が取得されています。Client Secretはbase64でエンコードされていません。このシークレットをbase64でエンコードする必要がありますか?JWTはjwt.ioでデコードされましたが、アプリケーションではデコードされていません

ValueError: Could not unserialize key data. 

ターミナル

>>> import jwt 

>>> secret = secret 
>>> encoded_jwt = encoded_jwt 
>>> decoded_jwt = jwt.decode(encoded_jwt, secret, algorithm="RS256") 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.6/site-packages/jwt/api_jwt.py", line 78, in decode 
    jwt, key=key, algorithms=algorithms, options=options, **kwargs 
    File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 140, in decode 
    key, algorithms) 
    File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 204, in _verify_signature 
    key = alg_obj.prepare_key(key) 
    File "/usr/local/lib/python3.6/site-packages/jwt/algorithms.py", line 207, in prepare_key 
    key = load_pem_public_key(key, backend=default_backend()) 
    File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/primitives/serialization.py", line 24, in load_pem_public_key 
    return backend.load_pem_public_key(data) 
    File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/multibackend.py", line 314, in load_pem_public_key 
    return b.load_pem_public_key(data) 
    File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1110, in load_pem_public_key 
    self._handle_key_loading_error() 
    File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1325, in _handle_key_loading_error 
    raise ValueError("Could not unserialize key data.") 
ValueError: Could not unserialize key data. 

答えて

1

あなたは、公開鍵や秘密鍵を言及していないとして、それはあなたが「RS256」アルゴリズムを使用して解読しようとしているように見えますが、あなたのトークンの使用」 HS256」と呼ばれる。

試してみてください。

decoded_jwt = jwt.decode(encoded_jwt、秘密、アルゴリズム= "HS256")

の代わり:

decoded_jwt = jwt.decode(encoded_jwt、秘密、アルゴリズム= "RS256")

あなたはこのアドレスに好きならBASE64を使用してキーをエンコードするのは自由です。 https://www.base64encode.org/

「VERIFY SIGNATURE」セクションのjwt.ioにある「secret64 encoded」のチェックボックスをオンにすると、エンコードされたキーを確認できます。

+0

RSA証明書から公開鍵/秘密鍵を取得する方法は分かりませんが、これを書いている時点では、私はAuth0のclient_secretを使ったと思っていましたが、多くの研究の結果、証明書から取得した公開鍵が必要であることが分かりました。私は証明書を取得することができましたが、公開鍵を取得するのには多くの問題があります。 – JBT

+0

このリンクはあなたを助けます:https://stackoverflow.com/questions/9497719/extract-public-private-key-from-pkcs12-file-for-later-use-in-ssh-pk-authenticati –

関連する問題