Skip to content

扩展认证 ​

扩展认证帮助用户使用自己服务进行认证,支持外部数据库如 MySQL, Redis 作为数据源,或者连接到 HTTP 服务做认证鉴权。

提示

Serverless 部署不支持扩展认证功能。

扩展认证数据源 ​

HTTP 认证

MySQL 认证

PostgreSQL 认证

Redis 认证

JWT 认证

TIP

最多支持创建两个扩展认证数据源。

认证器调用条件 ​

对于运行 EMQX 6.1 或更高版本的部署,可以为每个扩展认证器配置调用条件,用于判断是否应调用该认证器来认证当前客户端。调用条件是一个 Variform 表达式,可基于客户端属性信息进行逻辑判断。如果表达式的计算结果不是字符串值 'true',EMQX 将跳过当前认证器,并继续使用认证链中的下一个已启用认证器进行认证。

调用条件可以在认证链中实现条件认证逻辑。例如,可以根据客户端的连接信息或属性应用不同的认证器,使 EMQX 仅在适当的情况下调用认证器,避免向外部系统发送不必要的请求。

调用条件中支持的客户端属性 ​

调用条件中支持以下客户端属性:

  • username:客户端的用户名。
  • password:客户端的密码。
  • clientid:客户端 ID。
  • client_attrs.*:客户端的自定义属性。
  • cert_common_name:客户端 TLS 证书中的公用名称(CN)。
  • cert_subject:客户端 TLS 证书中的主体字段。
  • peersni:TLS 客户端发送的服务器名称指示(SNI)。
  • listener:监听器 ID,例如 ssl:default。

配置调用条件 ​

创建或编辑 HTTP、MySQL、PostgreSQL、Redis、JWT 或 JWKS 认证器时,在调用条件中输入 Variform 表达式。此配置为可选项。配置表达式时,其长度必须为 1 到 256 个字符。如果将此配置留空或清空已有表达式,EMQX 将根据认证器在认证链中的位置调用该认证器,不再评估额外的调用条件。

以下示例说明如何控制是否调用认证器:

  • 仅当客户端通过 ssl:default 监听器连接时调用认证器:

    text
    str_eq(listener, 'ssl:default')
  • 当用户名为空时跳过认证器:

    text
    not(is_empty_val(username))

如果表达式无效,无法保存配置,最后一次有效配置仍然生效。请根据 Cloud Console 显示的错误修正表达式,然后重试。有关调用条件和表达式语法的更多信息,参见 EMQX 文档中的认证器调用条件。

认证排序 ​

添加了扩展认证数据源之后,用户可以对认证数据源做排序。部署将按照从左到右的顺序进行认证,默认的认证链顺序为默认认证 -> 扩展认证。

  • 如果认证成功,终止认证链并允许客户端接入。
  • 如果认证失败,终止认证链并禁止客户端接入。
  • 如果当前数据源未能匹配,将进入下一个认证源进行认证。

如何创建认证链 ​

您可以在部署页面的访问控制 -> 客户端认证 -> 扩展认证中创建认证链。当配置并连接了扩展认证数据源后,您将在页面上看到排序设置区域。

  1. 点击认证排序,进入认证顺序设置页面。
  2. 拖动认证数据源的图标,左右排列进行认证顺序的编排。
  3. 排序完成后,点击确认保存更改。

auth_management

外部资源缓存 ​

提示

外部资源缓存功能适用于 EMQX 5.9 及以上版本的专有版部署。

EMQX Cloud 支持对来自外部后端(如 MySQL 或 Redis)的认证结果进行缓存。该缓存机制可提升认证查询的性能,减少在高吞吐量场景下对外部资源的重复访问。

注意

外部资源缓存仅适用于扩展认证数据源。对于默认的密码认证,EMQX 不使用该缓存机制。

外部资源缓存的工作原理 ​

外部资源缓存用于存储客户端认证的结果,这些结果在整个集群中的所有客户端会话之间共享,有效避免重复访问外部认证后端。

认证流程如下:

  1. 客户端连接并触发认证操作。
  2. EMQX Cloud 首先在缓存中查找是否已有对应的认证结果:
    • 如果找到了有效的结果,则视为缓存命中,无需访问外部后端。
    • 如果未找到缓存结果,则视为缓存未命中,EMQX Cloud 会向外部后端发起查询。
  3. 从后端返回的认证结果将被存入缓存,用于后续请求,并计入缓存写入指标。

该机制有助于降低认证延迟、减少外部资源调用,并在高负载下维持系统响应能力。

启用和配置外部资源缓存 ​

您可以在部署页面的访问控制 -> 客户端认证 -> 扩展认证中启用并配置外部资源缓存。当扩展认证数据源已配置并连接后,页面将显示缓存设置区域。

  1. 点击外部资源缓存设置打开侧边栏面板。
  2. 在面板中点击启用外部资源缓存开关以开启或关闭缓存功能。
  3. 启用后,可配置以下缓存参数:
    • 最大缓存数量:每个节点可缓存的最大条目数。默认值:1,000,000。
    • 最大内存:缓存可占用的最大内存。默认值:100 MB。
    • 缓存过期时间:每条缓存项的有效时长。默认值:1 分钟。
  4. 点击更新应用配置。

监控外部资源缓存状态 ​

若要实时查看缓存指标和使用情况:

  1. 将鼠标悬停在外部资源缓存设置右侧的箭头上;
  2. 点击外部资源缓存状态,弹出侧边栏查看实时缓存指标。

可查看的缓存指标包括:

  • 内存占用:当前缓存占用的总内存。
  • 缓存条目数:当前存储的缓存认证结果总数。
  • 缓存命中:EMQX Cloud 成功在缓存中找到有效结果,避免访问外部后端的次数。
    • 展示数据包括:当前速率、5 分钟平均值、最大速率
  • 缓存未命中:EMQX Cloud 未能在缓存中找到结果,因而查询外部后端的次数。
    • 展示数据包括:当前速率、5 分钟平均值、最大速率
  • 缓存插入:在未命中后新增写入缓存结果的次数。
    • 展示数据包括:当前速率、5 分钟平均值、最大速率

您可以通过面板右上角的按钮刷新或重置这些统计数据。

external_resource_cache_status