JsonWebToken在Node 4&节点6/8

时间:2017-10-05 09:02:13

标签: node.js json-web-token

我目前正在使用节点4中的node-jsonwebtoken生成JWT。当我尝试升级到节点8时,我无法签署节点4中生成的JWT(使用相同的秘密) & payload,签名不同)。这是一个问题,因为我不想让旧代币无效。

问题来自node-jwa library,一个依赖节点-jws,它是node-jsonwebtoken的依赖。我在GitHub上引用了这个问题,正如您所看到的,该模块的作者能够重现该问题。如果你想测试,这是代码:

const crypto = require('crypto');
const jwa = require('jwa');
const secret = crypto.createHash('sha256').update('secret').digest('binary');

const payload = { 
     uid: 'test',
     iat: 1455988418,
     iss: 'test' 
};


const algo = jwa('HS256');
const sig = algo.sign(payload, secret);

console.log(sig);
// Node v4 => "_zPq9vDP4_Ve0mTVTF_9H3NRkluQhoR4yAg8X4yqR8Q"
// Node v6 => "hk9bpxID-HOmvNpJUy7x80KqT5JP8tb_BoAJLYVIYsE"

据我所知,问题是摘要的默认编码在v5 / v6中更改为utf8。在v4及更早版本中它是二进制的。

Cf => github.com/nodejs/node/issues/6813

由于node-jwa的主要人员不再回复,我试图寻找一种解决方法,因为我真的不想永远坚持在Node 4中(不再是LTS)。 / p>

我试图找到修改node-jwa库的位置,以便它可以像Node 4一样在Node 8中签名。

似乎影响我的问题的行在这里的库=> github.com/brianloveswords/node-jwa/blob/master/index.js#L35

我试图做一些改变,但却无法完成这项工作......

如果你有任何好的解决方法,

非常感谢!

0 个答案:

没有答案