PyJWT повышает проверку подписи не удалось - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь проверить 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

enter image description here

Я гадаю секретный кодированный base64 сделал это различие.
Что я должен сделать для этого?

1 Ответ

0 голосов
/ 04 сентября 2018

jwt.decode(..) ожидает, что значение ключа будет фактическим секретом в текстовой строке, без кодировки. Похоже, что ваш токен был закодирован с помощью процедуры, которая ожидала, что секрет был закодирован в base64. Просто повезло, что ваш секретный "thingsboardDefaultSigningKey" был правильно декодирован как base64.

Измените свой вызов на: jwt.decode( token, b64decode('thingsboardDefaultSigningKey'), algorithms=['HS512'], options=jwt_options )

Затем он будет декодироваться без исключения.

...