Authlib JWT токен декодирование не работает внутри функции - PullRequest
0 голосов
/ 19 ноября 2018

Я использую библиотеку 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)

ошибка, которую я получаю:

Traceback (последний вызов был последним): File "/home/sathiyakugan/PycharmProjects/JWTsample/ss.py", строка 50, в email, role = getsessions () Файл "/home/sathiyakugan/PycharmProjects/JWTsample/ss.py", строка 39, в getsessions Заявка = jwt.decode (кодированный_jwt, секретный) Файл "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/authlib/specs/rfc7519/jwt.py", строка 119, в декодировании Файл data = 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, полезная нагрузка, ключ) Файл "/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_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 дней с этой проблемой. пожалуйста помоги.

1 Ответ

0 голосов
/ 19 ноября 2018

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

abcdadgadgadsgasdgasdg
    adgadgadg
    adgagadgadsg

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

...