通用鉴权系统
Access control lists
采用docker部署,容器默认监听80端口
环境变量见后面的环境变量说明
// 请用自己的redis url 替换 localhost
docker run -d name acl -e redis=redis://localhost jamma/acl
请参考 jm-server
| 配置项 | 默认值 | 描述 |
|---|---|---|
| redis | 必填, redis数据库uri | |
| acl_key | "acl:" | redis key前缀 |
| super_role | "root" | 超级角色 |
| guest_role | "guest" | 游客角色 |
| user_role | "user" | 登录用户角色 |
| default_allow | false | 允许访问未登记的资源或权限 |
| 配置项 | 默认值 | 描述 |
|---|---|---|
| gateway | "http://gateway" | Gateway服务器Uri |
| 配置项 | 默认值 | 描述 |
|---|---|---|
| service_name | "acl" | 链路追踪登记的服务名称 |
| jaeger | jaeger服务器Uri |
支持资源树
存储 redis
带有角色继承的RBAC

图片来自Apache Directory
带有资源继承的RBAC3
[
{'id': 'post', 'title': '增'},
{'id': 'delete', 'title': '删'},
{'id': 'put', 'title': '改'},
{'id': 'get', 'title': '查'}
]
[
{
'id': '/acl', 'title': '权限', 'permissions': ['get'],
'noRecursion': 1, // 是否向下传递
'children': [
{'id': '/isAllowed','title': '用户鉴权','permissions': ['get']},
...
},
},
...
]
[
{
'id': 'guest', 'title': '访客', 'description': '访客',
'resources': [{
'id': '/acl', 'permissions': ['get'],
'children': [
{'id': '/isAllowed', 'permissions': ['get']},
]
}]
},
{'id': 'user', 'title': '用户',parents: ['guest]},
...
]
[
{"id": "5d9d5af874050000c7006b43","nick": "admin","roles": ["admin"]},
...
]
load和save方法,从redis加载或保存RBAC配置
加载或保存时,自动调用validateAclConfig检查配置, 只要配置有任何变化,进入下面的步骤。
如果资源变化,基于资源树创建鉴权路由,实现areAnyRolesAllowed, isAllowed方法
如果角色变化,基于node-acl库的memoryBackend,动态生成node-acl的实例acl
核心 jm-acl
消息 jm-acl-mq
主入口 main
ACL管理用户, 用户的角色信息由ACL负责管理,通过 isAllowed 接口对于指定用户鉴权。
ACL不管理用户, 用户的角色信息由其他服务负责管理,通过 areAnyRolesAllowed 接口对于指定角色鉴权。
自定义角色,用户把自己拥有的权限分配给自定义的角色
// 保存用户角色
put /acl/user/users/用户id {roles: ['admin']}
// 鉴权
get /acl/isAllowed {user: '用户id', resource: '资源id', permissions: ['权限id']}
// 例如
get /acl/isAllowed {user: '326482', resource: '/sso', permissions: ['get']}
// 鉴权
get /acl/areAnyRolesAllowed {roles: ['角色id'], resource: '资源id', permissions: ['权限id']}
// 例如
get /acl/areAnyRolesAllowed {roles: ['admin'], resource: '/sso', permissions: ['get']}
ACL不管理用户,新建服务管理用户自定义角色。
// 查询自己的角色拥有的权限
get /acl/roles/:role/resources
// 在自建服务创建自定义角色
post /servcie/roles {id:'自定义角色id', name: '自定义角色名称'}
// 在 acl 新建自定义角色
put /acl/roles/自定义角色id {resources:{}}
Content type
Image
Digest
Size
30.2 MB
Last updated
over 6 years ago
docker pull jamma/acl