【发布时间】:2019-12-09 19:54:21
【问题描述】:
我正在尝试根据此示例(在 .NET 中编写)解析和验证 node.js 中的 JWT 令牌:https://github.com/liveservices/LiveSDK/blob/master/Samples/Asp.net/AuthenticationTokenSample/JsonWebToken.cs
这是我验证令牌的节点 js javascript:
var validateSignature = function(key, claims, envelope, signature) {
var hasher = crypto.createHash('sha256');
hasher.update(key + "JWTSig");
var key = hasher.digest('binary');
var hmac = crypto.createHmac('sha256', key);
hmac.update(envelope + '.' + claims);
var out = hmac.digest('base64');
console.log(out);
console.log(signature);
console.log(out === signature);
}
现在,非常奇怪的是 - 它几乎可以工作。以下是三个 console.log 语句的输出:
pEwNPJ+LUHBdvNx631UzdyVhPFUOvFY8jG3x/cP81FE=
pEwNPJ-LUHBdvNx631UzdyVhPFUOvFY8jG3x_cP81FE
false
在我看来,除了 +-/_= 之外,哈希值都相同
有人发现我的错误吗?与我的 base64 编码有关。
更新
我又玩了一些,这里的 base64 编码似乎有些奇怪。 node js中的如下代码:
console.log(signature);
var b = new Buffer(signature, 'base64');
console.log(b.toString('base64'));
产量:
pEwNPJ-LUHBdvNx631UzdyVhPFUOvFY8jG3x_cP81FE
pEwNPJLUHBdvNx631UzdyVhPFUOvFY8jG3xcP81F
这看起来很奇怪,对吧?
【问题讨论】:
-
可能是该节点的 hmac 函数输出了一个 Web 或 URL 安全哈希,而您的其余代码是正确的。
-
类似的东西,我刚刚更新了
标签: javascript authentication node.js base64 jwt