Authlib JWT токен декодирование не работает внутри функции

1

Я использую библиотеку 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 дней с этой проблемой. пожалуйста помоги.

Теги:
authentication
jwt
access-token

1 ответ

1
Лучший ответ

В функции есть отступ в secret строке, это превратит PUBLIC_KEY в недопустимый ключ, потому что он не имеет хорошего отступа. Ключ будет что-то вроде этого в вашей функции

abcdadgadgadsgasdgasdg
    adgadgadg
    adgagadgadsg

Вы можете сохранить свой secret файл в файле public_key.pem и прочитать данные из этого файла.

  • 0
    это доказывает, что я ошибся там, где думал, что нет. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню