最近我正在开发一个nodeJS项目,我正在考虑如何着手和实现我的移动应用程序的安全模块。我以前在 C# 项目中使用过 OAuth 2.0 协议。
在.NET中有两个不错的开源项目
-
https://github.com/thinktecture/Thinktecture.IdentityServer.v3 https://github.com/thinktecture/Thinktecture.IdentityServer.v3
- https://github.com/thinktecture/Thinktecture.AuthorizationServer https://github.com/thinktecture/Thinktecture.AuthorizationServer
前者是支持联合身份验证的身份提供程序,后者是 OAuth 2.0 提供程序。
因此,我决定为我的 NodeJS 应用程序采用相同的安全基础设施。但据我所知,没有任何项目可以与这些项目相媲美。
我发现了一些非常好的项目,虽然尚未完成,但却是一个好的开始:
-
https://www.npmjs.org/package/node-oauth2-server https://www.npmjs.org/package/node-oauth2-server
- https://github.com/domenic/restify-oauth2 https://github.com/domenic/restify-oauth2
此外,我发现了一篇不错的文章,其中提出了一种在 NodeJS 中处理身份验证的好方法。https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/ https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/以及对 stackoverflow 上问题的类似回答。网站与自有API之间的认证 https://stackoverflow.com/questions/20793902/auth-between-a-website-and-self-owned-api/20804905?noredirect=1#comment35537435_20804905
据我了解,expressJwt 保护我们的 api,基本上会验证用户发送的访问令牌。但我想更进一步,将令牌与应用程序特定范围关联起来,就像使用 OAuth2.0 协议一样。例如,我想分配写入、读取等范围,并让expressJwt检查用户的令牌是否具有作为特定API端点访问所需的范围。
如果您能为我提供一些有关如何处理此主题的建议,我将不胜感激。
首先,您需要生成具有此类声明的令牌。这可能在 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。您可以将此中间件放置在需要此声明的每个端点中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)