无法在解码JWT python时反序列化关键数据 [英] Could not deserialize key data on decoding JWT python

查看:418
本文介绍了无法在解码JWT python时反序列化关键数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 pyjwt 库来解码JWT令牌。解码时出现此错误。代码是在文档中给出的。

I am using pyjwt library for decoding the JWT token. I got this error when I am decoding. The code was given in the documantation.

import jwt

encoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''
secret=b''''-----BEGIN PUBLIC KEY-----
MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9w0BAQsFADBN
......
-----END PUBLIC KEY-----'''

print(jwt.decode(encoded_jwt, secret , algorithms=['RS256']))




raise ValueError(无法反序列化关键数据。)ValueError:
无法反序列化关键数据。

raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.

请帮我解决它,因为当我在 JWT 网站正在运行。

Could You please help me in resolving it beacuse when I use this it in the JWT website it's working.

这是完整的错误日志。


Traceback(最近一次调用):File
/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages /jwt/algorithms.py\",
行205,在prepare_key
键= load_pem_p中rivate_key(key,password = None,backend = default_backend())文件
/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py ,
第20行,在load_pem_private_key
中返回backend.load_pem_private_key(数据,密码)文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat /backends/openssl/backend.py,
行1014,在load_pem_private_key
密码中,文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/ hazmat / backends / openssl / backend.py,
行1233,在_load_key
self._handle_key_loading_error()文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site- package / cryptography / hazmat / backends / openssl / backend.py,
行1291,在_handle_key_loading_error
中,引发ValueError(无法反序列化密钥数据。)ValueError:无法反序列化密钥数据。

Traceback (most recent call last): File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py", line 205, in prepare_key key = load_pem_private_key(key, password=None, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py", line 20, in load_pem_private_key return backend.load_pem_private_key(data, password) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1014, in load_pem_private_key password, File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1233, in _load_key self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1291, in _handle_key_loading_error raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.

在处理上述异常期间,发生了另一个异常:

During handling of the above exception, another exception occurred:

跟踪(最近一次通话最近):File
/ home / sathiyakugan / PycharmProjects / JWTsample / sample.py,第45行,在

print(jwt.decode(encoded_jwt,secret,algorithm = ['RS256']))文件
/ home /sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py\",
第93行,用于解码
jwt,key = key,algorithm =算法,选项= options,** kwargs File
/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py\",
第157行,在解码
键,算法)文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py,
第221行,在_verify_signature
中键= alg_obj.prepare_key(键)文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py\",
行,在prepare_key $ b $中k ey = load_pem_public_key(key,backend = default_backend())文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py\",
第24行,在load_pem_public_key
中,返回backend.load_pem_public_key(data)文件 /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py ,
行1040,在load_pem_public_key
self._handle_key_loading_error()文件中, / home / sathiyakugan / PycharmProjects / Python / venv / lib / python3.5 / site-packages / cryptography / hazmat / backends / openssl /backend.py\",
行1291,在_handle_key_loading_error
中引发ValueError(无法反序列化关键数据。)ValueError:无法反序列化关键数据。

Traceback (most recent call last): File "/home/sathiyakugan/PycharmProjects/JWTsample/sample.py", line 45, in print(jwt.decode(encoded_jwt, secret , algorithms=['RS256'])) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jwt.py", line 93, in decode jwt, key=key, algorithms=algorithms, options=options, **kwargs File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py", line 157, in decode key, algorithms) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/api_jws.py", line 221, in _verify_signature key = alg_obj.prepare_key(key) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/jwt/algorithms.py", line 207, in prepare_key key = load_pem_public_key(key, backend=default_backend()) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/primitives/serialization.py", line 24, in load_pem_public_key return backend.load_pem_public_key(data) File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1040, in load_pem_public_key self._handle_key_loading_error() File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1291, in _handle_key_loading_error raise ValueError("Could not deserialize key data.") ValueError: Could not deserialize key data.

以退出代码1结束的进程

Process finished with exit code 1


推荐答案

pyjwt中存在一些问题图书馆。并且您必须从证书中获取公钥。

There are some issues in the pyjwt library. and you must get the public key from the certificate.

我使用了 openssl x509 -pubkey -noout -in cert.pem> pubkey.pem

然后从公钥中,我可以使用authlib库轻松对其进行解码。

then from the public key I could easily decode it using authlib library.

from authlib.specs.rfc7519 import jwt

encoded_jwt='''eyJ0eXAiOiJ....'''
secret=b'''-----BEGIN PUBLIC KEY-----
......
-----END PUBLIC KEY-----'''
claims = jwt.decode(encoded_jwt, secret)
print(claims)

这篇关于无法在解码JWT python时反序列化关键数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆