1. 认证和授权流程
认证和授权需要一个第三方用户管理中心,该管理中心的功能包含以下几点:
- 提供用户注册和管理。
- 提供tenant、namespace、topic的创建和管理。
- 提供用户信息和权限的验证接口。
当新增一个业务时,需要创建对应的用户,然后使用该用户创建tenant、namespace和topic。然后客户端可以携带用户名/密码连接到broker,broker到管理中心验证用户是否有效,拉取用户的权限并保存到本地,之后对客户端的操作进行权限的验证。
整体流程:

上述设计的核心是把tenant、namespace、topic的看作一种资源,消息的发布和订阅看作是对资源的使用,认证和授权的方案设计就可以分成两部分:
- 对资源的管理权限
- 对资源的使用权限
其中,对资源的管理权限可以由用户中心去做,可以创建用户,给用户分配资源和使用权限,同时也可以给用户创建子用户,给子用户分配主用户权限下的资源等。用户中心的输出就是<角色,权限>的集合,把这个集合提供给broker,这样broker就可以根据这个集合判断用户的操作是否合法。
2. 数据表设计
表名 |
含义 |
功能 |
备注 |
sys_user_info |
用户信息表 |
配置用户信息 |
|
sys_service_group |
业务分组表 |
用户属于某一个业务 |
|
sys_role |
角色表 |
用角色进行权限的控制 |
|
sys_user_role_map |
用户和角色关系表 |
用户和角色之间的关系,一个用户可能属于多个角色 |
|
res_cluster |
集群表 |
配置ADMQ集群信息,包含名称、地址等 |
|
res_tenant |
租户表 |
配置集群下的租户信息 |
|
res_namespace |
命名空间表 |
配置租户下的namespace信息 |
|
res_topic |
topic表 |
配置namespace下的topic信息 |
|
sys_role_res |
角色和资源权限关系表 |
配置角色和资源之间的关系和对应的权限 |
|
sys_authority |
权限配置表 |
配置资源权限字典 |
|
2.1 用户信息表
名称 |
含义 |
类型 |
备注 |
id |
用户ID |
bigint(20) |
主键递增 |
username |
用户名称 |
varchar(128) |
|
nick |
昵称 |
varchar(128) |
|
passwd |
用户密码 |
varchar(128) |
加密后 |
service_group |
业务分组 |
bigint(20) |
|
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
2.2 业务分组表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
group_name |
分组名称 |
varchar(128) |
|
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
2.3 角色表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
role_name |
角色名称 |
varchar(128) |
|
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
2.4 用户和角色关系表
名称 |
含义 |
类型 |
备注 |
user_id |
用户id |
bigint(20) |
|
role_id |
角色id |
bigint(20) |
|
add_time |
添加时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
1.5 集群表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
name |
集群名称 |
varchar(128) |
|
address |
集群地址 |
varchar(128) |
|
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
1.6 租户表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
clusters |
所属集群 |
varchar(128) |
可以属于多个集群 |
name |
名称 |
varchar(128) |
|
is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
1.7 命名空间表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
tenant |
租户ID |
bigint(20) |
|
name |
名称 |
varchar(128) |
|
is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
1.8 topic表
名称 |
含义 |
类型 |
备注 |
id |
组ID |
bigint(20) |
主键递增 |
tenant |
租户ID |
bigint(20) |
|
namespace |
命名空间ID |
bigint(20) |
|
name |
名称 |
varchar(128) |
|
is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
add_time |
添加时间 |
bigint(20) |
|
update_time |
修改时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
1.9 角色和资源权限关系表
名称 |
含义 |
类型 |
备注 |
role_id |
角色ID |
bigint(20) |
|
res_type |
资源类型 |
int(11) |
1:cluster2:tenant3:namespace4:topic |
res_id |
资源ID |
bigint(20) |
|
authorities |
权限列表 |
varchar(128) |
逗号隔开 |
add_time |
添加时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
|
|
|
|
|
|
|
|
1.10 权限配置表
名称 |
含义 |
类型 |
备注 |
id |
主键 |
int(11) |
|
desc |
权限描述 |
varchar(256) |
|
add_time |
添加时间 |
bigint(20) |
|
remark |
备注信息 |
varchar(256) |
|
|
|
|
|
|
|
|
|
目前支持的几种权限:
ID |
含义 |
备注 |
100 |
创建tenant |
|
101 |
删除tenant |
|
102 |
tenant下所有topic的写权限 |
|
103 |
tenant下所有topic的读权限 |
|
|
|
|
200 |
创建namespace |
|
201 |
删除namespace |
|
202 |
namespace下所有topic的写权限 |
|
203 |
namespace下所有topic的读权限 |
|
|
|
|
300 |
创建topic |
|
301 |
删除topic |
|
302 |
topic的写权限 |
|
303 |
topic的读权限 |
|