加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Node.js / Angular.js管理员授权的路由

发布时间:2020-12-17 07:01:01 所属栏目:安全 来源:网络整理
导读:我正在使用 JSON Web令牌进行身份验证的MEAN应用程序.基本上每个请求,我都在检查用户是否有有效的令牌.如果是这样,他们可以进入路线,否则他们将返回登录页面. 我想让某些路由/ admin / etc …只能由也是admin的登录用户访问.我在mongo中设置了一个isAdmin标
我正在使用 JSON Web令牌进行身份验证的MEAN应用程序.基本上每个请求,我都在检查用户是否有有效的令牌.如果是这样,他们可以进入路线,否则他们将返回登录页面.

我想让某些路由/ admin / etc …只能由也是admin的登录用户访问.我在mongo中设置了一个isAdmin标志.我是nodejs的新手,想知道检查这个的最佳方法是什么.我是否在路线的角度边做?或者我可以以某种方式创建基于权限的身份验证令牌?作为参考,我遵循MEAN机器书中的代码,特别是在这里 –

https://github.com/scotch-io/mean-machine-code/tree/master/17-user-crm

解决方法

首先,必须在服务器端完成授权决策.如你所建议的那样在Angular.js中在客户端执行它也是一个好主意,但这只是为了改善用户体验,例如没有向用户显示他们无法访问的内容的链接.

使用JWT,您可以在令牌中嵌入有关用户的声明,如下所示:

var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' },'your_secret');

要映射表达路由的权限,可以使用connect-roles构建清晰且可读的授权中间件功能.假设您的JWT是在HTTP标头中发送的,并且您拥有以下(天真)授权中间件:

// Naive authentication middleware,just for demonstration
// Assumes you're issuing JWTs somehow and the client is including them in headers
// Like this: Authorization: JWT {token}
app.use(function(req,res,next) {
    var token = req.headers.authorization.replace(/^JWT /,'');
    jwt.verify(token,'your_secret',function(err,decoded) {
        if(err) {
            next(err);
        } else {
            req.user = decoded;
            next();
        }
    });
})

这样,您就可以在路由上强制执行授权策略,如下所示:

var ConnectRoles = require('connect-roles');
var user = new ConnectRoles();

user.use('admin',function(req) {
    return req.user && req.user.role === 'admin';
})

app.get('/admin',user.is('admin'),function(req,next) {
    res.end();
})

请注意,有更好的选择发布&验证JWT,如express-jwt,或使用passport和passort-jwt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读