4

我正在使用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 制作的应用程序支持角色和权限的架构应该是什么?将来我也需要保护我的套接字。我正在查看passport-socketio ..但不确定是否有更好的解决方案。

4

1 回答 1

2

我将 JWT 用于我的 Angular 应用程序。有很多关于使用令牌而不是会话或 cookie Cookie 与令牌的好处的文章。使用 Angular.JS 获得正确的身份验证

你可以用 JWT 做任何你想做的事情,后端和前端的角色,保护套接字也是可能的,并且有这个功能的包。如果您使用代币,则不需要护照。您检查一次凭据并将令牌存储在浏览器本地存储中。express 和 JWT Express-JWT的包有很多

仔细查看 JWT jwt.io

于 2015-04-24T18:18:19.750 回答