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

标签 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 中实现授权?这个授权中间件是不是用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/

相关文章:

security - session 是否足够安全来验证用户身份?

security - 如何验证 PasswordVault 是否加密了 Windows Phone 8.1 上的凭据

node.js - 使用passport.js在node.js中进行身份验证后重定向到上一页

node.js - Angular 不显示创建的对象,直到我刷新页面

javascript - 如何在 Angular js 中动态设置单选按钮的选中状态

security - 为什么质询-响应方法是忘记密码的糟糕解决方案?

node.js - express (using multer) 错误 : Multipart: Boundary not found, POSTMAN 发送的请求

javascript - 如何从 findOne() Mongoose 返回结果

javascript - MEAN Stack 应用程序结构

Python/Django - 避免在源代码中保存密码