Nodejs 应用如何配合 keystone 实现 RBAC 功能
Nodejs 应用如何配合 keystone 实现 RBAC 功能
准备开发 Nodejs 下的企业内应用并实现 RBAC,大致了解了下实现方式,按我的理解是这样的:
- Openstack 的 keystone 可以配合 LDAP 实现用户的认证及权限配置
- 在 keystone 中针对应用配置不同项目的用户角色所具有目标资源的权限
- Nodejs 应用调用 keystone API,传入角色,目标资源等参数后返回是否具有权限后应用自行控制
或者各位大神有很好的用 Keystone 实现 RBAC 实例可否分享
OpenStack 里的其他服务都是通过一个 middleware 来实现 keystone 的认证的,你可以照着它实现一遍。https://github.com/openstack/keystonemiddleware/blob/master/keystonemiddleware/auth_token/init.py
记得几年前 LDAP 的实现基本是废的,现在不知道怎么样。
关注下,楼主找到好的方案后麻烦 @下我
两位大神能不能看看
没有现成的,另外你问得也太宽泛,用途是自己 Intranet 用用,还是放到产品里面?准备投入多少开发人力?
如果只是自己 Intranet 里面用,我对 Nodejs 一窍不通,仅以 Django 为例,说下可能的思路:
User/Group ID & Auth 由 LDAP 作 Provider,用 https://pypi.python.org/pypi/django-auth-ldap 连接
RBAC Roles/Assignments/Resources/Tokens 用 SQL DB 存储,参考 https://github.com/ging/fiware-idm (参考其 API 设计,不推荐其 Fork keystone 直接改的方式)
Authorization Policies 管理,用 Openstack 自己的 https://github.com/openstack/oslo.policy
Keystone 处于中间连接位置,相当于 MVC 里的 Controller,剩下 View 的部分不用多讲
如果是放到规模化产品里面,人力又不特别充裕,建议不要自己折腾,老老实实买商业方案集成进去,因为要把 IAM 功能和安全都搞到位,很不容易,特别是安全方面需要专家。
非常感谢,已经提供了思路
目前只是内部管理系统实现,将来可能会根据情况作为产品实现,所以现在还可以折腾一下,将来不行了再考虑买个成熟方案吧
在 Node.js 应用中配合 Keystone 实现基于角色的访问控制(RBAC)功能,你可以通过以下步骤来实现。Keystone 是一个开源的 Node.js 和 GraphQL 框架,它允许你快速构建数据库驱动的 API。
-
安装 Keystone 和相关依赖:
npm install [@keystonejs](/user/keystonejs)/keystone [@keystonejs](/user/keystonejs)/adapter-mongoose [@keystonejs](/user/keystonejs)/fields npm install [@keystonejs](/user/keystonejs)/auth-password [@keystonejs](/user/keystonejs)/list-plugins
-
定义用户、角色和权限模型:
const { Keystone, List, Text, Password, Checkbox, Relationship } = require('[@keystonejs](/user/keystonejs)/keystone'); const keystone = new Keystone({ name: 'MyApp', adapter: new AdapterMongoose({}), }); keystone.createList('User', { fields: { name: { type: Text }, email: { type: Text, isUnique: true }, password: { type: Password }, roles: { type: Relationship, ref: 'Role.users' }, }, }); keystone.createList('Role', { fields: { name: { type: Text, isUnique: true }, permissions: { type: Checkbox, options: ['read', 'write', 'delete'] }, }, }); module.exports = keystone;
-
实现访问控制逻辑: 在查询或变更数据时,根据用户的角色和权限进行验证。这可以通过在 Keystone 的 hooks 或中间件中实现。
-
启动 Keystone 应用:
const { createServer } = require('[@keystonejs](/user/keystonejs)/server-express'); const expressApp = express(); const server = createServer({ keystone, app: expressApp, }); server.start();
通过上述步骤,你可以在 Node.js 应用中利用 Keystone 实现 RBAC 功能。根据具体需求,你可以进一步扩展和优化这些代码。