我正在使用mean.js,我对这里的身份验证和授权有点怀疑......
MEAN.js 带有一个开箱即用的passport.js 实现,它似乎对我来说足够好,只是知道用户何时登录。但是在授权的那一刻,我的脑海中出现了一些问题......做我的研究 我得到了一些答案,但我不知道在我的应用程序中实现安全 API 调用的最佳方法是什么。
到目前为止,我正在采取这个解决方案:
使用 express.all() 函数将我所有的授权功能设置在一个文件中(我想这是一个很好的做法吗?)..使用以下代码示例创建一个文件:
'use strict';
var passport = require('passport');
module.exports = function(app) {
app.route('/private/p/*').all(function(req, res, next){
if(!req.isAuthenticated()){
res.send(401);
}else{
next();
}
});
app.route('/private/byRoles/*').all(function(req, res, next){
if(!req.isAuthenticated()){
res.send(401);
}else{
var urlRoles = ['admin', 'godlike'];
// ROLE LOGICS THAT ARE GOING TO BE ADDED TO MY USER
// GETTING MY USER ID BY THE DE-SERIALIZE PASSPORT FUNCTION AND GETTING MY
// MONGO MODEL FOR MY USER, WITH THE INFO OF ROLES IN THERE AND DOING
// SOME LOGICS HERE ABOUT THE ROLES AND URL PATTERN.
if ( hasRole(urlRoles, user.roles)){
next();
}else{
res.send(401);
}
}
});
};
到目前为止,这是我计划实现的解决方案,但我想确定我在这里做什么......是否有更好的方法在 mean.js 中实现授权?这个授权中间件是不是用passport实现的?我不确定是否有必要为此实现另一种策略……或者这个实现是否缺乏安全性(肯定必须……使用 Oauth 或使用 api token 更好???应该采用什么架构来保护在 MEAN.js 中支持角色和权限的应用程序?将来我也需要保护我的 socket ..我在看passport-socketio..但不确定是否有更好的解决方案。
最佳答案
我将 JWT 用于我的 angular 应用程序。有很多关于使用 token 代替 session 或 cookie 的好处的文章 Cookies vs Tokens. Getting auth right with Angular.JS .
你可以用 JWT 做你想做的一切,后端和前端的角色,保护套接字也是可能的,并且有这个功能的包。如果您使用 token ,则不需要 Passport 。您检查一次凭据并将 token 存储在浏览器的本地存储中。 express和JWT的包很多Express-JWT
仔细看看 JWT jwt.io
关于security - 使用 MEAN.js 实现安全性的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540552/