认证和授权(3)

1. 认证和授权流程

认证和授权需要一个第三方用户管理中心,该管理中心的功能包含以下几点:

  1. 提供用户注册和管理。
  2. 提供tenant、namespace、topic的创建和管理。
  3. 提供用户信息和权限的验证接口。

当新增一个业务时,需要创建对应的用户,然后使用该用户创建tenant、namespace和topic。然后客户端可以携带用户名/密码连接到broker,broker到管理中心验证用户是否有效,拉取用户的权限并保存到本地,之后对客户端的操作进行权限的验证。

整体流程:

图片

上述设计的核心是把tenant、namespace、topic的看作一种资源,消息的发布和订阅看作是对资源的使用,认证和授权的方案设计就可以分成两部分:

  1. 对资源的管理权限
  2. 对资源的使用权限

其中,对资源的管理权限可以由用户中心去做,可以创建用户,给用户分配资源和使用权限,同时也可以给用户创建子用户,给子用户分配主用户权限下的资源等。用户中心的输出就是<角色,权限>的集合,把这个集合提供给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的读权限
Author: iMine
Link: https://imine141.github.io/2021/08/05/pulsar/pulsar%E8%AE%A4%E8%AF%81%E5%92%8C%E6%8E%88%E6%9D%83(3)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.