Skip to content

客户端认证

FlowMQ 提供统一的客户端认证能力,所有协议(MQTT、Kafka、AMQP)共享同一套账号与凭据体系。

是否强制认证、以及可用的认证器,均随计划而定。

计划与项目隔离

每个项目拥有独立的账号、凭据与授权策略,与其他项目相互隔离、互不可见。认证的工作方式随计划而定:

  • Free 计划:认证强制开启,无法关闭。所有客户端都必须通过内置的密码认证、使用有效的用户名和密码连接;不支持匿名访问,也仅支持密码认证。
  • Pro / Enterprise 计划:项目运行在独享实例上。管理员可自行选择每个协议使用哪个认证器(密码认证Webhook),以及是否开启认证。我们强烈建议开启认证。

认证器

认证器在客户端连接时校验其凭据。FlowMQ 支持以下认证器类型:

类型说明可用计划
密码认证(password)用户名/密码认证,凭据存储于 FlowMQ 内部所有计划
Webhook将认证请求转发至外部 HTTP 服务,由业务系统决定是否放行(见 Webhook 认证Pro / Enterprise

密码认证器是内置的,全局只有一个,不能新建或删除,只能启用或关闭。Webhook 等其他类型的认证器可按需创建多个,每个使用各自的名称;管理员为每个协议指定使用哪一个认证器。

各协议的凭据承载方式:

协议认证方式
MQTTCONNECT 报文中的 username / password
KafkaSASL/PLAIN(暂不支持 SCRAM)
AMQPSASL PLAIN

管理密码用户

内置的密码认证器存储自己的用户名/密码凭据。在 Dashboard 中管理:

  1. 进入 Authentication 页面,打开内置的密码认证器。
  2. 点击 Add User(添加用户),输入用户名与密码,点击 Create;如需修改密码或删除用户,在用户列表中选中条目,执行 Reset PasswordDelete
  3. 密码认证器不能删除;在 Pro / Enterprise 计划上,如需停用,将其**关闭(Disable)**即可(Free 计划下密码认证始终开启)。

为各协议选择认证器

INFO

仅独享的 Pro / Enterprise 实例可用。

每个协议最多使用一个认证器,不同协议可以使用不同的认证器。当某个协议选择了认证器时,该协议的所有连接都必须通过对应的凭据校验;未选择认证器的协议则允许匿名访问。

这让管理员可以按协议独立配置认证策略。例如,对外的 MQTT 接入使用 Webhook 对接业务系统,内部的 Kafka 接入使用内置的用户名/密码认证,而 AMQP 保持匿名开放。

在 Dashboard 中配置:

  1. 进入 Authentication(客户端认证)页面。
  2. 如需使用 Webhook 等外部认证器,点击 Create Authenticator(创建认证器),选择类型、填写名称与配置后点击 Create;密码认证器为内置实例,无需创建。
  3. 在各协议配置区域,为目标协议(MQTT、Kafka、AMQP)选择要使用的认证器,点击 Save 保存。

如需解除某协议的认证,在各协议配置区域将其认证器设为空并保存,该协议即恢复匿名访问。

匿名访问

未选择认证器的协议允许无凭据连接,并将每个连接作为匿名身份接受,授权策略仍可对其放行或拒绝。如需强制认证,为该协议选择一个认证器即可。

Webhook 认证

INFO

Pro / Enterprise 计划可用。

Webhook 认证器把凭据校验交给外部认证服务:客户端连接时,FlowMQ 调用该服务,由其返回放行或拒绝,并可附带身份标识与属性。它适合复用已有账号体系,或在认证时动态下发用于授权的属性。Webhook 目前只处理用户名/密码类凭据。

在 Dashboard 的创建认证器流程中选择 Webhook,填写以下字段:

字段必填默认值说明
Webhook 地址外部认证服务的地址,需可被 FlowMQ 访问,使用 HTTP 或 HTTPS。
超时时间(秒)5等待认证服务响应的最长时间,超时即判定认证失败。
请求头以名称/值成对添加的自定义请求头(如携带服务令牌的 Authorization);Content-Type: application/json 会自动附带。
自定义 Payload一个 JSON 对象,作为请求体模板覆盖默认内容;留空则发送默认的用户名/密码等字段。值中可使用下方占位符。
Principal ID Path$.user_id从认证服务响应中提取身份标识的 JSON 路径。
Attributes Path$.attributes从响应中提取属性对象的 JSON 路径;提取到的属性会写入身份,供授权策略匹配,或在资源名中以 ${principal.attributes.<名称>} 引用。

请求头自定义 Payload 的值中可使用占位符 ${username}${password}${clientid}${peerhost}${protocol},在认证时按当前连接展开。

认证服务需对放行的连接返回成功,并可在响应 JSON 中携带身份标识与属性,FlowMQ 按上面两个 Path 从中提取。

示例:对接一个需要 Bearer 令牌、并返回用户 ID 与团队属性的认证服务,可如下填写:

  • Webhook 地址https://auth.example.com/verify
  • 超时时间(秒)3
  • 请求头Authorization = Bearer my-service-token
  • Principal ID Path$.data.id
  • Attributes Path$.data.attrs

该服务对放行的连接返回如下响应:

json
{
  "result": "success",
  "data": {
    "id": "device-42",
    "attrs": { "team": "sensors" }
  }
}

FlowMQ 据此将身份标识设为 device-42、属性设为 { "team": "sensors" },可在授权策略中以 ${principal.attributes.team} 引用。