我正在使用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中实现授权?这个授权中间件用护照实现错误了吗?我不确定是否有必要实施另一种策略。或者如果这个实现缺乏安全性(当然它必须)…使用Oauth还是使用api令牌更好??应该是什么架构,以确保在MEAN.js支持角色和权限的应用程序?在未来,我还需要保护我的插座…我在看护照夹…但不确定是否有更好的解决方案。
我在我的angular应用中使用JWT。有很多关于使用令牌而不是会话或cookie的好处的文章。正确使用Angular.JS
你可以用JWT做任何你想做的事情,后端和前端的角色,保护套接字也是可能的,并且有这个功能的包。如果您使用代币,则不需要护照。您检查一次凭证,并将令牌存储在浏览器的本地存储中。有许多express和JWT express包-JWT
查看JWT JWT .io