在跟随guide创建自定义身份提供商以获取azure移动服务后,我可以轻松生成相应的令牌。代码很简单,看起来像这样:
var userAuth = {
user: { userId : userId },
token: zumoJwt(expiry, aud, userId, masterKey)
}
response.send(200, userAuth);
zumoJwt的参数和代码的定义位于链接。 Azure自动解码令牌并在请求对象上填充用户,这是我想要模拟的。
基本上我想通过Node(而不是.net)解密服务器端的令牌。
答案 0 :(得分:1)
我最终做的验证令牌是以下(煮沸了)。这似乎是关于天蓝色移动服务在需要授权的路由上所做的事情。
var jws = require('jsw'); // https://github.com/brianloveswords/node-jws
function userAuth() {
var token = ''; // get token as header or whatever
var key = crypto.createHash('sha256').update(global.masterKey + "JWTSig").digest('binary');
if (!jws.verify(token,key)) {
// invalid token logic
} else {
var decode = jws.decode(token)
req.user = {
userId: decode.payload.uid.split(';')[0].split('::')[0]
};
next();
}
}
app.use(authChecker);
答案 1 :(得分:0)
令牌并未真正加密 - 它们只是签名。令牌具有JWT format(为清晰起见添加了换行符):
<header>, base64-encoded
"."
<envelope>, base64-encoded
"."
<signature>, base64-encoded
如果要解码(不解密)节点中的令牌,可以拆分.
字符中的值,取前两个成员,base64解码它们(var buffer = new Buffer(part, 'base64')
),然后将缓冲区转换为字符串(buffer.toString('utf-8')
)。
如果要验证令牌,只需按照与令牌重新签名令牌的前两部分(标题+'。'+信封)所需的相同步骤,与令牌相同已创建,并将其与您在原始令牌上收到的签名进行比较。