最近,我正在做一个nodeJS项目,我正在考虑如何实现我的移动应用程序的安全模块。我以前有过OAuth 2.0协议的经验,我在过去的C#项目中使用过该协议。
在.NET中有两个很好的开源项目
前者是支持联邦身份验证的身份提供者,后者是OAuth 2.0提供程序。
因此,我决定为我的nodeJS应用程序使用相同的安全基础设施。但据我所知,没有什么能与这些项目相提并论。
我发现了一些非常好的项目,这些项目尚未完成,但却是一个很好的开端:
此外,我还看到了一篇很好的文章,其中提出了一种处理nodeJS身份验证的好方法。https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/和类似的对堆栈溢出问题的回答。Auth between a website and self-owned API
据我所知,expressJwt保护我们的api,基本上将验证用户发送的访问令牌。但我想更进一步,将令牌与特定于应用程序的作用域联系起来,其方式类似于OAuth2.0协议。例如,我希望分配一个写、读等作用域,并让expressJwt检查用户的令牌是否具有作为特定API端点访问所需的作用域。
如果你能就如何处理这个问题向我提供一些建议,我将不胜感激。
发布于 2014-04-23 15:37:27
首先,您需要生成一个带有此类声明的令牌。它可能在API或其他地方:
var jwt = require('jsonwebtoken');
var claims = {
name: user.name
can_write: true,
can_post_timeline: false
};
var token = jwt.sign(claims, 'my-super-secret');然后,为了验证您将执行如下操作:
var jwt = require('express-jwt');
app.use(jwt({secret: 'my-super-secret'}));
function require_time_line_access (req, res, next) {
if (!req.user.can_post_timeline) return res.send(401);
next();
}
app.post('/timeline',
require_time_line_access,
function(req, res) {
//do timeline stuff
});express-jwt验证令牌的签名、过期和其他一些东西。如果一切正常,它将解码的令牌放在req.user中,如果不是好的,则返回401。
require_time_line_access是一种中间件,它可以确保用户有此声明,如果没有,则返回401。您可以将该中间件放入需要此声明的每个端点中。
https://stackoverflow.com/questions/23240339
复制相似问题