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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |