JWT декодируется на jwt.io, но не в приложении

Я пытаюсь декодировать JWT, полученный от Auth0. Когда я захожу на jwt.io, у них есть декодер, в который вы можете вставить JWT, и он расскажет вам всю информацию о каждом разделе JWT. Я вижу, что вся информация верна. Однако, когда я пытаюсь его декодировать, я получаю эту ошибку. Я получаю секретный ключ из информации о моем зарегистрированном клиенте Auth0, и есть примечание, в котором говорится: Секрет клиента не закодирован в формате base64. Нужно ли мне кодировать этот секрет base64 перед его использованием?

ValueError: Could not unserialize key data.

Терминал

>>> import jwt

>>> secret = secret
>>> encoded_jwt = encoded_jwt
>>> decoded_jwt = jwt.decode(encoded_jwt, secret, algorithm="RS256")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/jwt/api_jwt.py", line 78, in decode
    jwt, key=key, algorithms=algorithms, options=options, **kwargs
  File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 140, in decode
    key, algorithms)
  File "/usr/local/lib/python3.6/site-packages/jwt/api_jws.py", line 204, in _verify_signature
    key = alg_obj.prepare_key(key)
  File "/usr/local/lib/python3.6/site-packages/jwt/algorithms.py", line 207, in prepare_key
    key = load_pem_public_key(key, backend=default_backend())
  File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/primitives/serialization.py", line 24, in load_pem_public_key
    return backend.load_pem_public_key(data)
  File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/multibackend.py", line 314, in load_pem_public_key
    return b.load_pem_public_key(data)
  File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1110, in load_pem_public_key
    self._handle_key_loading_error()
  File "/usr/local/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1325, in _handle_key_loading_error
    raise ValueError("Could not unserialize key data.")
ValueError: Could not unserialize key data.

person TJB    schedule 19.12.2017    source источник


Ответы (1)


Поскольку вы не упоминаете ОБЩИЙ КЛЮЧ или ЧАСТНЫЙ КЛЮЧ, похоже, вы пытаетесь декодировать с использованием алгоритма «RS256», но ваш токен использует «HS256».

пытаться:

decoded_jwt = jwt.decode (encoded_jwt, секрет, алгоритм = "HS256")

вместо того:

decoded_jwt = jwt.decode (encoded_jwt, секрет, алгоритм = "RS256")

Вы можете свободно закодировать ключ с помощью base64, если хотите, по этому адресу: https://www.base64encode.org/ < / а>

Вы можете проверить закодированный ключ, установив флажок "secret base64 encoded" на jwt.io в разделе VERIFY SIGNATURE.

person Peter RD    schedule 20.12.2017