Я использую библиотеку 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]
но когда я добавляю это в функцию, она не работает. из-за этой проблемы я не смог использовать ее в работе с флягами. код ниже не работает. Пожалуйста, не отвечайте, проверьте открытый ключ, потому что он работает нормально в приведенном выше коде.
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, в электронном письме, role = getsessions() Файл "/home/sathiyakugan/PycharmProjects/JWTsample/ss.py" строка 39, в getsessions arguments = jwt.decode(encoded_jwt, secret) Файл "/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 key = attribute.prepare_public_key (key)"/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7518/_backends/_key_crytography строка 28, в retu_public_key rn 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_pekey return 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. _handle_key_loading_error() Файл "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/backend.py", строка 1291, в значении _handle_key_loadrror десериализовать данные ключа. ") ValueError: Не удалось десериализовать данные ключа.
Пожалуйста, помогите мне, где я ошибся. Я изо всех сил пытался продвинуться в течение 2 дней с этой проблемой. пожалуйста помоги.
В функции есть отступ в secret
строке, это превратит PUBLIC_KEY в недопустимый ключ, потому что он не имеет хорошего отступа. Ключ будет что-то вроде этого в вашей функции
abcdadgadgadsgasdgasdg
adgadgadg
adgagadgadsg
Вы можете сохранить свой secret
файл в файле public_key.pem
и прочитать данные из этого файла.