PyJWT поднимает проверку подписи не удалось
Я пытаюсь проверить JWT, который выдан ThingsBoard. Но проверка не удалась с Signature verification failed
Мой тестовый код ниже.
def test_jwt_decoding():
jwt_options = {
'verify_signature': True,
'verify_exp': True,
'verify_nbf': False,
'verify_iat': True,
'verify_aud': False
}
token = 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbkB0LW1vbmV0LmNvbSIsInNjb3BlcyI6WyJURU5BTlRfQURNSU4iXSwidXNlcklkIjoiODNiYmEzNDAtMDI3ZC0xMWU4LWI4ZmEtYWY1YjU0OTEyMDA0IiwiZmlyc3ROYW1lIjoi7ISx64Ko7IucIiwibGFzdE5hbWUiOiLqtIDrpqzsnpAiLCJlbmFibGVkIjp0cnVlLCJpc1B1YmxpYyI6ZmFsc2UsInRlbmFudElkIjoiMzkwMTNjNzAtMDI3ZC0xMWU4LWI4ZmEtYWY1YjU0OTEyMDA0IiwiY3VzdG9tZXJJZCI6IjEzODE0MDAwLTFkZDItMTFiMi04MDgwLTgwODA4MDgwODA4MCIsImlzcyI6InRoaW5nc2JvYXJkLmlvIiwiaWF0IjoxNTM1OTU1NDE2LCJleHAiOjM2NzU5NTU0MTZ9.N1Ms0LA7WtOel1pg6lTMRNDJosY3qfR6Q4SVuAUwmDPmTj4uYnKU0B-9Wdlqmg4HQRUXa23edOTU-TnAxfBoyg'
try:
jwt.decode(
token,
'thingsboardDefaultSigningKey',
algorithms=['HS512'],
options=jwt_options
)
assert True
except Exception as err:
print(str(err))
assert False
Я проверил, что подпись была проверена на jwt.io Единственная разница была в том, что секретный base64 был зашифрован на jwt.io
Я засекретил секретный кодированный base64 сделал это различия.
Что я должен сделать для этого?
1 ответ
jwt.decode(..)
ожидает, что значение ключа будет фактическим секретом в текстовой строке, без кодирования. Похоже, что ваш токен был закодирован с помощью подпрограммы, которая ожидала, что секрет был закодирован в base64. Просто повезло, что ваш секретный "thingsboardDefaultSigningKey" был правильно декодирован как base64.
Измените ваш звонок на:
jwt.decode(
token,
b64decode('thingsboardDefaultSigningKey'),
algorithms=['HS512'],
options=jwt_options
)
Затем он будет декодироваться без исключения.