最近我正在开发一个nodeJS项目,我正在考虑如何去实现我的移动应用程序的安全模块。我之前有过OAuth 2.0协议的经验,我曾在C#项目中使用过。
在.NET中有两个不错的开源项目
前者是支持联合身份验证的身份提供程序,后者是OAuth 2.0提供程序。
所以我决定为我的nodeJS应用程序使用相同的安全基础结构。但据我所知,没有任何东西可以与这些项目相提并论。
我找到了一些非常好的项目,这些项目尚未完成但是一个良好的开端:
另外,我遇到了一篇很好的文章,它提出了一种在nodeJS中处理身份验证的好方法。 https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/以及对stackoverflow的查询的类似答案。 Auth between a website and self-owned API
根据我的理解,expressJwt保护我们的api,并且基本上将验证用户发送的访问令牌。但是我想更进一步,并将令牌与应用程序特定的范围相关联,其方式与OAuth2.0协议相似。因此,例如,我想分配一个写入,读取等范围,并使用expressJwt检查用户的令牌是否具有作为特定API端点访问所需的范围。
如果您能就如何处理此主题提供一些建议,我将不胜感激。
答案 0 :(得分:2)
首先,您需要生成具有此类声明的令牌。这可以在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.您可以将此中间件放在需要此声明的每个端点中。