最近我正在开发一个nodeJS项目,我正在考虑如何着手和实现我的移动应用程序的安全模块。我以前在 C# 项目中使用过 OAuth 2.0 协议(protocol)。
.NET中有两个不错的开源项目
- https://github.com/thinktecture/Thinktecture.IdentityServer.v3
- https://github.com/thinktecture/Thinktecture.AuthorizationServer
前者是支持联合身份验证的身份提供商,后者是 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,并且基本上会验证用户发送的访问 token 。但我想更进一步,将 token 与应用程序特定范围关联起来,就像使用 OAuth2.0 协议(protocol)一样。例如,我想分配写入、读取等范围,并让expressJwt检查用户的 token 是否具有作为特定API端点访问所需的范围。
如果您能为我提供一些有关如何处理此主题的建议,我将不胜感激。
最佳答案
首先,您需要生成包含此类声明的 token 。这可能在 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
验证 token 的签名、过期时间和其他一些内容。如果一切正常,它将解码后的 token 放入 req.user
中,如果不正常,则返回 401。
require_time_line_access
是一个中间件,可确保用户拥有此声明,如果没有,则返回 401。您可以将此中间件放置在需要此声明的每个端点中。
关于node.js - NodeJS OAuth2.0原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240339/