首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyJWT引发签名验证失败

PyJWT引发签名验证失败
EN

Stack Overflow用户
提问于 2018-09-04 01:09:05
回答 1查看 19.2K关注 0票数 5

我正在尝试验证由ThingsBoard发布的JWT。但是Signature verification failed的验证失败了

我的测试代码在下面。

代码语言:javascript
复制
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编码的造成了这种差异。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 02:45:18

jwt.decode(..)期望键值是文本字符串中的实际秘密,而不是编码。看来您的令牌是用一个例程编码的,该例程预期秘密是base64编码的。幸运的是,你的秘密,'thingsboardDefaultSigningKey‘恰好正确地解码为base64。

将您的电话更改为:

代码语言:javascript
复制
jwt.decode(
    token,
    b64decode('thingsboardDefaultSigningKey'),
    algorithms=['HS512'],
    options=jwt_options
)

然后,它将毫无例外地解码。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52157576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档