我有一个用Python编写的API和另一个用Ruby编写的API。我们需要它们在彼此之间发送数据,并已决定使用JWT作为身份验证方法。基本上在任一端都生成令牌,并确保它们匹配。现在我在python和ruby之间有匹配的哈希值问题。给定此代码:python(2.7)PyJWT == 1.6.4
>>> import jwt
>>> jwt.encode({"someKey":123}, "secret", algorithm='HS256')
u'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lS2V5IjoxMjN9.DL8qyWMeqfMMLCTPN3RA9K08e-AkNW_ybPyywvrIIZ8'
这似乎在python版本之间也发生了变化-在python3上运行时产生了这个
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcHBlbklkIjoxMjN9.YgFKZePJYMRDMgubCeZBy6WaFKiTA9C-TRnnZLFJC8E'
然后,当我在ruby中创建类似的“函数”时,我得到了不同的哈希值-这在ruby的jwt版本之间也是如此(我已经测试过jwt-1.5.6和jwt-2.1.0)-下面是jwt-1.5 .6结果。
require "jwt"
someKey = 123
secret = "secret"
payload = {"someKey" => someKey}
token = JWT.encode payload, secret, 'HS256'
puts token
该代码的输出是
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lS2V5IjoxMjN9.7Ch3o7IXmxqm79AcrTetXuZv6h3suyLD5_IgXdrRlNs
使用版本jwt-2.1.0,我得到:
eyJhbGciOiJIUzI1NiJ9.eyJzb21lS2V5IjoxMjN9.QkKm2IuvOz_D5ukIxOsjMYApzV2ZnjLE2HII3ZfP_hsWith
为什么这两个代码集的输出会产生两个不同的哈希值?
编辑:当我使用jwt.io
https://jwt.io/#debugger-io?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lS2V5IjoxMjN9.DL8qyWMeqfMMLCTPN3RA9K08e-AkNW_ybPyywvr
我得到与python相同的令牌
慕神8447489
慕虎7371278
相关分类