认证和授权(2)

前面介绍了认证和授权的主要流程,本篇重点说明pulsar授权信息的存储以及怎么结合第三方用户中心实现授权管理。

  1. 基于pulsar-admin的授权指令

关于cluster、broker、bookie、tenant、namespace、topic的命令。

具体可参考:https://pulsar.apache.org/pulsar-admin-cli/?version=2.8.0

  1. 授权信息存储

使用pulsar默认的授权管理类(org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider),授权信息会保存到global-zookeeper中,路径如下:

[zk: 172.20.140.11:2184(CONNECTED) 5] ls -R /admin/policies /admin/policies /admin/policies/public /admin/policies/pulsar /admin/policies/tenant_c /admin/policies/tenant_vv /admin/policies/public/default /admin/policies/pulsar/system /admin/policies/tenant_vv/ns1

查看/admin/policies/tenant_vv/ns1的节点内容

{ “auth_policies”: { “destination_auth”: {}, “namespace_auth”: { “vv123”: [ “consume”, “produce” ] }, “subscription_auth_roles”: {} }, “backlog_quota_map”: {}, “bundles”: { “boundaries”: [ “0x00000000”, “0x40000000”, “0x80000000”, “0xc0000000”, “0xffffffff” ], “numBundles”: 4 }, “clusterDispatchRate”: {}, “clusterSubscribeRate”: {}, “deleted”: false, “encryption_required”: false, “is_allow_auto_update_schema”: true, “latency_stats_sample_rate”: {}, “offload_threshold”: -1, “properties”: {}, “publishMaxMessageRate”: {}, “replication_clusters”: [ “vv” ], “replicatorDispatchRate”: {}, “schema_auto_update_compatibility_strategy”: “Full”, “schema_compatibility_strategy”: “UNDEFINED”, “schema_validation_enforced”: false, “subscriptionDispatchRate”: {}, “subscription_auth_mode”: “None”, “subscription_expiration_time_minutes”: 0, “subscription_types_enabled”: [], “topicDispatchRate”: {} }

在auth_policies里可以看到给角色vv123分配了produce和consume权限。

  1. 授权实现思路

首先需要对所有需要权限的操作进行拦截,pulsar提供了如下两个接口:

// 处理连接认证的 org.apache.pulsar.broker.authentication.AuthenticationProvider

// 处理授权的 org.apache.pulsar.broker.authorization.AuthorizationProvider

定义一组需要进行权限管理的操作,具体如下:

定义好用户和操作之间的关系,并给每一个用户分配唯一的token标识

在一次连接中保存用户的token信息和权限,并定时更新权限

针对用户的每一次操作都根据token进行权限的验证

由此我们可以知道,授权管理的前提是有一个用户管理中心,管理中心负责用户的创建和权限的分配。客户端连接的时候去用户中心获取token信息,然后携带token连接到broker,broker在用户第一次连接是去管理中心获取用户的权限信息并缓存。最后就是对用户的操作进行权限的判断了。

  1. 用户信息管理中心

结合pulsar的常用操作,我们可以设计几张表保存用户信息和权限信息。

Author: iMine
Link: https://imine141.github.io/2021/08/01/pulsar/pulsar%E8%AE%A4%E8%AF%81%E5%92%8C%E6%8E%88%E6%9D%83(2)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.