【发布时间】:2021-06-14 17:19:55
【问题描述】:
我们开发一个应用程序,前面是 VuejS,后面是一个 api Nodejs(Restify)。 我们使用第三方为我们提供身份验证(具有 OpenId Connect 协议的身份提供者)。
因此,使用 VueJs 我们可以进行身份验证,获取 access_token 和 id_token,然后将其传递到每个带有承载的 nodejs 请求标头中。
现在我们需要在后面验证此令牌是否有效以及用户是否可以访问此路由。
我们的身份提供者为我们提供了一个端点 (jwks_uri),其键如下:
{
"keys": [
{
"kty": "RSA",
"kid": "AXDJKLFJDLKFJLKJFLKSJDFLKJSFL",
"e": "AQAB",
"n": "2T3QDw6gcSDFS........................VRtQSDQSDQSDQSD"
}
]
}
我从中提取了公钥,结果类似于:
-----BEGIN PUBLIC KEY-----
MIIB......................OCAQ8AMIIBCgKCAQEA2T3QDw6gcqrTZRy74XWy
Bn0JoQzg/H2QX.............................................fqX13O
4QIDAQAB
-----END PUBLIC KEY-----
现在我想用这个公钥验证 id_token 我尝试这样的事情
jwt.verify(token, publicKey, { algorithms: ['RS256'] }, function(err, decoded) {
//This will display the decoded JWT token.
console.log(decoded)
});
-
但我不知道如何正确使用验证来检查有效性? 索赔?
-
我是否必须每次对我想要的每条道路重做相同的处理 保护?像这样?
server.get('/data1', async function (req, res, next) { try { helper.validAccessToken(req).then(function(res) => { if(res){ data=getData(); res.send(data) ; } else{ res.send(401, {message: 'Unauthorizd'}) } }); } catch (err) { return next(err); } });
【问题讨论】:
标签: node.js api authentication jwt openid-connect