Получение только декодированной полезной нагрузки из JWT в python

#python #jwt

#питон #jwt

Вопрос:

Есть ли хороший способ (возможно, используя какую-нибудь библиотеку) получить только полезную нагрузку из JWT, сохраненную как строковая переменная? Кроме ручного анализа содержимого между первой и второй точками и последующего декодирования.

Комментарии:

1. сделайте свой выбор: jwt.io/#libraries-io

2. Чувак, вот с чем я борюсь. Все эти библиотеки обеспечивают комплексный подход. Все, что я хочу, это легко получить хороший объем полезной нагрузки, например jwt.io позволяет мне делать это после вставки JWT в их инструмент.

Ответ №1:

Библиотека PyJWT имеет возможность декодировать JWT без проверки:

Без этой опции decode функция не только декодирует токен, но и проверяет подпись, и вам придется предоставить соответствующий ключ. И это, конечно, рекомендуемый способ.
Но если вы по какой-либо причине просто хотите декодировать полезную нагрузку, установите для параметра verify_signature значение false .

 import jwt
key='super-secret'
payload={"id":"1","email":"myemail@gmail.com" }
token = jwt.encode(payload, key)
print (token)
decoded = jwt.decode(token, options={"verify_signature": False}) # works in PyJWT >= v2.0
print (decoded)
print (decoded["email"])

 

Для PyJWT <версии 2.0 используйте:

 decoded = jwt.decode(token, verify=False)  # works in PyJWT < v2.0
 

Он возвращает словарь, чтобы вы могли получить доступ к каждому значению по отдельности:

b’eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJlbWFpbCI6Im15ZW1haWxAZ21haWwuY29tIn0.ljEqGNGyR36s21NkSf3nv_II-Ed6fNv_xZL6EdbqPvw’

{‘id’: ‘1’, ’email’: ‘myemail@gmail.com ‘}

myemail@gmail.com

Примечание: существуют и другие библиотеки JWT для python, и это также может быть возможно с другими библиотеками.

Комментарии:

1. Что, если я тоже хочу иметь заголовок?

2. вот как это делается: jwt.get_unverified_header(токен)