使用MEAN.js实现安全性的更好方法是什么?

时间:2014-07-02 20:35:18

标签: security express mean-stack passport.js passport.socketio

我正在使用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支持角色和权限的应用程序的架构?还有将来我需要保护我的插座..我正在看护照socketio ..但不确定是否有更好的解决方案。

1 个答案:

答案 0 :(得分:2)

我将JWT用于我的角度应用程序。有很多关于使用令牌而不是会话或cookie Cookies vs Tokens. Getting auth right with Angular.JS的好处的文章。

您可以使用JWT完成所需的一切,后端和前端的角色,安全套接字也是可能的,并且有此功能的软件包。如果使用令牌,则不需要护照。您一次检查凭据并将令牌存储在浏览器本地存储中。快递和JWT Express-JWT

有很多套餐

仔细查看JWT jwt.io