我正在尝试验证由ThingsBoard发布的JWT。
但是验证失败,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上验证 唯一的不同是在jwt.io上秘密base64编码
我在猜测秘密的base64编码造成了这种差异。
我该怎么办?
答案 0 :(得分:2)
jwt.decode(..)
期望键值是文本字符串中的实际机密,不进行编码。似乎您的令牌已使用例程进行了编码,该例程预期该机密已通过base64编码。真幸运,您的秘密“ thingsboardDefaultSigningKey”恰好可以正确解码为base64。
将通话更改为:
jwt.decode(
token,
b64decode('thingsboardDefaultSigningKey'),
algorithms=['HS512'],
options=jwt_options
)
然后它将毫无例外地进行解码。