ZHub 权限配置
配置方式
- app.ini: 开启/关闭权限验证
- auth.yml: 详细权限配置
权限控制
- 连接认证:通过Token验证客户端身份
- 主题权限:控制对特定主题的读写权限
- 操作类型:区分读取(r)和写入(w)操作
基础配置
开启权限验证:
[service]
auth=1 # 开启连接授权
关闭权限验证:
[service]
auth=0 # 关闭连接授权(内网环境)
auth.yml 配置文件
配置文件结构
# auth.yml 权限配置文件
users:
- id: 1
username: "admin"
password: "admin123"
status: "active"
groups: ["admin"]
reads: ["*"] # 读取权限
writes: ["*"] # 写入权限
- id: 2
username: "client-001"
password: "client123"
status: "active"
groups: ["client"]
reads: ["user.*", "order.*"] # 可读取 user.* 和 order.* 主题
writes: ["user.*"] # 可写入 user.* 主题
groups:
- name: "admin"
description: "管理员组"
reads: ["*"]
writes: ["*"]
- name: "client"
description: "客户端组"
reads: ["user.*", "order.*"]
writes: ["user.*"]
配置说明
用户配置 (users)
- id: 用户唯一标识
- username: 用户名
- password: 密码
- status: 用户状态 (active/inactive)
- groups: 所属用户组列表
- reads: 读取权限列表,支持正则表达式
- writes: 写入权限列表,支持正则表达式
用户组配置 (groups)
- name: 组名
- description: 组描述
- reads: 组读取权限
- writes: 组写入权限
客户端连接配置
Java 项目
// 带认证的连接
ZHubClient zhub = new ZHubClient(
"127.0.0.1:1216", // 服务地址
"groupid-x", // 消费者组
"appid-unique-001", // 应用ID(必须唯一)
"token-12345" // 认证令牌
);
SpringBoot 项目
# application.yml
zhub:
addr: 127.0.0.1:1216
groupid: groupid-x
appid: appid-unique-002
auth: token-12345
重要注意事项
AppID 唯一性
关键要求
- 每个客户端必须使用不同的 appid
- RPC 消息回复使用 appid 标识
- 相同 appid 会导致 RPC 消息回复失败
权限管理
# 重新加载权限配置
curl http://127.0.0.1:711/auth/reload
内网环境
# app.ini - 关闭权限验证(仅内网环境)
[service]
auth=0
权限配置示例
users:
- id: 1
username: "user-service"
reads: ["user.*"] # 匹配 user.login, user.profile 等
writes: ["user.*"]
- id: 2
username: "order-service"
reads: ["order.*", "user.basic.*"]
writes: ["order.*"]
- id: 3
username: "admin-service"
reads: ["*"] # 匹配所有主题
writes: ["*"]
管理接口
# 重新加载权限配置
curl http://127.0.0.1:711/auth/reload
# 查看服务状态
curl http://127.0.0.1:711/_/info
最佳实践
Topic 命名规范
team.service.action
# 示例:
user.profile.update
order.payment.process
权限最小化
# 只给必要的权限
- id: 1
username: "order-service"
reads: ["order.*", "user.basic.*"]
writes: ["order.*"]
环境配置
- 开发环境: 可关闭权限验证 (
auth=0
) - 生产环境: 必须开启权限验证 (
auth=1
) - 使用强随机 Token
- 定期轮换 Token