我正在使用authlib库来解码JWT令牌。
当我按原样运行时,此代码工作正常。
from authlib.specs.rfc7519 import jwt
encoded_jwt = '''eyJ0eXAiOiJKV1Qi.....'''
secret = b'''-----BEGIN PUBLIC KEY-----
.....
-----END PUBLIC KEY-----'''
claims = jwt.decode(encoded_jwt, secret)
print(type(claims))
import json
json_parse = json.loads(json.dumps(claims))
email = json_parse['http://wso2.org/claims/emailaddress']
print(email)
roles = json_parse['http://wso2.org/claims/role']
print(roles)
email, roles[-1]
但是当我将其添加到函数中时,它不起作用。由于这个问题,我无法在FLASK框架中使用它。下面的代码不起作用。请不要回答检查公钥,因为上面的代码可以正常工作。
def getsessions():
from authlib.specs.rfc7519 import jwt
encoded_jwt = '''eyJ0eXAiOiJ....'''
secret = b'''-----BEGIN PUBLIC KEY-----
............
-----END PUBLIC KEY-----'''
claims = jwt.decode(encoded_jwt, secret)
print(type(claims))
import json
json_parse = json.loads(json.dumps(claims))
email = json_parse['http://wso2.org/claims/emailaddress']
print(email)
roles = json_parse['http://wso2.org/claims/role']
print(roles)
email, roles[-1]
email,role=getsessions()
print(email)
我得到的错误是:
回溯(最近通话最近):文件 “ /home/sathiyakugan/PycharmProjects/JWTsample/ss.py”,第50行,在 email,role = getsessions()文件“ /home/sathiyakugan/PycharmProjects/JWTsample/ss.py”,第39行,在 获取会话 Claims = jwt.decode(encoded_jwt,秘密)文件“ /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7519/jwt.py”, 第119行,在解码中 数据= self._jws.deserialize_compact(s,key_func,decode_payload)文件 “ /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7515/jws.py”, 第108行,在deserialize_compact中 self._algorithms,jws_header,payload,key)文件“ /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7515/util.py”, 第14行,在prepare_algorithm_key中 密钥= algorithm.prepare_public_key(密钥)文件“ /home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7518/_backends/_key_cryptography.py”, 第28行,在prepare_public_key中 return 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:无法反序列化关键数据。
请帮助我我哪里做错了。我一直在努力解决这个问题长达2天。请帮忙。
答案 0 :(得分:1)
在该函数中,secret
字符串中有一个缩进,这会导致PUBLIC_KEY变成无效键,因为缩进不好。关键在您的函数中将是这样的
abcdadgadgadsgasdgasdg
adgadgadg
adgagadgadsg
您可以将secret
保存到名为public_key.pem
的文件中,然后从该文件中读取数据。