如何将 JWT 身份验证与 ACL 混合使用
How to mix jwt authentication with ACLs
我已经能够使用JWT策略实现护照,并且效果很好。 我的受 jwt 保护的路由看起来像这样...
app.get('/thingThatRequiresLogin/:id', passport.authenticate('jwt', { session: false }), thingThatRequiresLogin.findById);
现在,我需要将某些内容的访问限制为仅属于某个角色的登录用户。 我希望我能这样表达:
app.get('/thingThatRequiresLogin/:id', MAGIC, thingThatRequiresLogin.findById);
哪里MAGIC = require logged-in users, but only those with role x or y
node_acl似乎是一个很好的解决方案,我在一定程度上理解它,但后来我在文档中发现了这一点......
我们可以像这样保护资源:
app.put('/blogs/:id', acl.middleware(), function(req, res, next){…}
中间件将保护由 req.url 命名的资源,选择 用户来自 req.session.userId 并检查 req.method的权限, 所以以上相当于这样:
如何将其与我的 JWT 策略混合使用? 我唯一的想法是放弃node_acl middleware
,而是将 ACL 检查代码添加到我的 jwt 策略中。 但这就是我遇到麻烦的地方。 我的 jwt 函数如下所示:
passport.use(new JwtStrategy(jwtOptions, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create a new account
}
});
}));
根据node_acl的说法,我可以问这样的事情...
acl.isAllowed('jsmith', 'blogs', ['edit','view','delete'])
那么我可以(我应该吗?)改变我的 JwtStrategy 来表达类似的话......
if (user && acl.isAllowed(user.username, 'blogs', ['edit','view','delete']) {
// ...
如果是这样,此函数如何知道资源名称'blogs'
和权限['edit' etc]
? 这些在定义路线时是已知的,但我认为我在策略函数中需要它们。 我做错了吗? 有人可以告诉我正确的方法吗?
app.get('/thingThatRequiresLogin/:id',
[
passport.authenticate('jwt', { session: false }),
acl.middleware( 1, getUserId )
],
thingThatRequiresLogin.findById);
从这个要点中获取线索:https://gist.github.com/danwit/e0a7c5ad57c9ce5659d2以及关于 NPM 的node_acl文档:https://www.npmjs.com/package/acl#middlewareacl.middleware 有三个可选参数:acl.middleware(numPathComponents, userId, permissions)
numPathComponents: 1//要选择事物需要登录路径
userId:getUserId//getUserId 是一个返回 userId 的函数
我希望这有帮助
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 混合元素的有角度的ng重复
- VueJS多个混合
- 如何对混合格式的数字(89900,1k,1.5k,15.2k)进行排序
- 过滤”;溢价;页面加载选项使用混合
- 将javascript与PHP混合?(跟踪Google Analytics虚拟页面浏览量)
- 在混合基本 URL 下动态加载 require.js 模块
- javascript散列/数组混合性能
- 如何通过ibmworklight中的sql适配器从db2中检索或显示html页面上的数据?android混合应用程序开发
- StrongLoop: ACL for Subtable
- 如何在 VB 项目中混合使用 Razor 和 Javascript
- 混合类型提前.js和引导 3.
- 混合 Web/客户端框架
- 如何在树枝模板中包含已解释和未解释文本的混合
- 我想在混合移动应用程序中使用Sqlite插件(Cordova)创建一个示例项目
- 在 JavaScript 中与状态混合
- 猫鼬混合模式不起作用
- 将剃刀语法与 JavaScript 混合
- 混合了文字和数组的Javascript数组
- 如何将 JWT 身份验证与 ACL 混合使用