扩展授权
扩展授权帮助用户使用自己服务进行授权,支持外部数据库如 MySQL, Redis 作为数据源,或者连接到 HTTP 服务做授权。
提示
Serverless 部署不支持扩展授权功能。
扩展授权数据源
TIP
虽然最多支持两种扩展授权,但为确保性能,不建议同时使用多种扩展授权。
授权排序
在添加扩展授权数据源后,您可以对授权源进行排序。部署将按照从左到右的顺序执行授权检查。默认情况下,最近添加的授权源排在最前,而“默认授权”位于最后。
- 系统会将客户端的操作与权限进行匹配,并基于权限决定是否允许或拒绝该操作。
- 如果当前授权源未匹配到权限,将继续传递给下一个授权源进行检查。
如何创建授权链
您可以在部署页面的访问控制 -> 客户端授权 -> 扩展授权中创建授权链。当扩展授权数据源配置并连接成功后,页面将显示顺序设置区域。
- 点击授权排序,进入授权顺序设置页面。
- 通过左右拖动授权数据源图标调整授权顺序。
- 完成后点击确认保存顺序设置。
启用白名单模式的授权链要求
启用白名单模式后,默认拒绝所有客户端的订阅和发布操作,必须显式授予权限才能进行这些操作。详细设置步骤请参见:开启授权白名单模式。
要启用白名单模式,必须确保默认授权位于授权链的最后一位。您可以在授权排序页面下的顺序设置区域中调整其位置。
外部资源缓存
提示
外部资源缓存功能适用于 EMQX 5.9 及以上版本的专有版部署。
EMQX Platform 支持对来自外部后端(如 MySQL 或 Redis)的授权结果进行缓存。该缓存机制可提升授权查询的性能,减少在高吞吐量场景下对外部资源的重复访问。
:::
外部资源缓存的工作原理
外部资源缓存用于存储客户端授权的结果,这些结果在整个集群中的所有客户端会话之间共享,有效避免重复访问外部授权后端。
授权流程如下:
- 客户端连接并触发授权操作。
- EMQX Platform 首先在缓存中查找是否已有对应的授权结果:
- 如果找到了有效的结果,则视为缓存命中,无需访问外部后端。
- 如果未找到缓存结果,则视为缓存未命中,EMQX Platform 会向外部后端发起查询。
- 从后端返回的授权结果将被存入缓存,用于后续请求,并计入缓存写入指标。
该机制有助于降低授权延迟、减少外部资源调用,并在高负载下维持系统响应能力。
启用和配置外部资源缓存
您可以在部署页面的访问控制 -> 客户端授权 -> 扩展授权中启用并配置外部资源缓存。当扩展授权数据源已配置并连接后,页面将显示缓存设置区域。
- 点击外部资源缓存设置打开侧边栏面板。
- 在面板中点击启用外部资源缓存开关以开启或关闭缓存功能。
- 启用后,可配置以下缓存参数:
- 最大缓存数量:每个节点可缓存的最大条目数。默认值:1,000,000。
- 最大内存:缓存可占用的最大内存。默认值:100 MB。
- 缓存过期时间:每条缓存项的有效时长。默认值:1 分钟。
- 点击更新应用配置。
监控外部资源缓存状态
若要实时查看缓存指标和使用情况:
- 将鼠标悬停在外部资源缓存设置右侧的箭头上;
- 点击外部资源缓存状态,弹出侧边栏查看实时缓存指标。
可查看的缓存指标包括:
- 内存占用:当前缓存占用的总内存。
- 缓存条目数:当前存储的缓存授权结果总数。
- 缓存命中:EMQX Platform 成功在缓存中找到有效结果,避免访问外部后端的次数。
- 展示数据包括:当前速率、5 分钟平均值、最大速率
- 缓存未命中:EMQX Platform 未能在缓存中找到结果,因而查询外部后端的次数。
- 展示数据包括:当前速率、5 分钟平均值、最大速率
- 缓存插入:在未命中后新增写入缓存结果的次数。
- 展示数据包括:当前速率、5 分钟平均值、最大速率
您可以通过面板右上角的按钮刷新或重置这些统计数据。