客户端认证
FlowMQ 提供统一的客户端认证能力,所有协议(MQTT、Kafka、AMQP)共享同一套账号与凭据体系。
是否强制认证、以及可用的认证器,均随计划而定。
计划与项目隔离
每个项目拥有独立的账号、凭据与授权策略,与其他项目相互隔离、互不可见。认证的工作方式随计划而定:
- Free 计划:认证强制开启,无法关闭。所有客户端都必须通过内置的密码认证、使用有效的用户名和密码连接;不支持匿名访问,也仅支持密码认证。
- Pro / Enterprise 计划:项目运行在独享实例上。管理员可自行选择每个协议使用哪个认证器(密码认证或 Webhook),以及是否开启认证。我们强烈建议开启认证。
认证器
认证器在客户端连接时校验其凭据。FlowMQ 支持以下认证器类型:
| 类型 | 说明 | 可用计划 |
|---|---|---|
| 密码认证(password) | 用户名/密码认证,凭据存储于 FlowMQ 内部 | 所有计划 |
| Webhook | 将认证请求转发至外部 HTTP 服务,由业务系统决定是否放行(见 Webhook 认证) | Pro / Enterprise |
密码认证器是内置的,全局只有一个,不能新建或删除,只能启用或关闭。Webhook 等其他类型的认证器可按需创建多个,每个使用各自的名称;管理员为每个协议指定使用哪一个认证器。
各协议的凭据承载方式:
| 协议 | 认证方式 |
|---|---|
| MQTT | CONNECT 报文中的 username / password |
| Kafka | SASL/PLAIN(暂不支持 SCRAM) |
| AMQP | SASL PLAIN |
管理密码用户
内置的密码认证器存储自己的用户名/密码凭据。在 Dashboard 中管理:
- 进入 Authentication 页面,打开内置的密码认证器。
- 点击 Add User(添加用户),输入用户名与密码,点击 Create;如需修改密码或删除用户,在用户列表中选中条目,执行 Reset Password 或 Delete。
- 密码认证器不能删除;在 Pro / Enterprise 计划上,如需停用,将其**关闭(Disable)**即可(Free 计划下密码认证始终开启)。
为各协议选择认证器
INFO
仅独享的 Pro / Enterprise 实例可用。
每个协议最多使用一个认证器,不同协议可以使用不同的认证器。当某个协议选择了认证器时,该协议的所有连接都必须通过对应的凭据校验;未选择认证器的协议则允许匿名访问。
这让管理员可以按协议独立配置认证策略。例如,对外的 MQTT 接入使用 Webhook 对接业务系统,内部的 Kafka 接入使用内置的用户名/密码认证,而 AMQP 保持匿名开放。
在 Dashboard 中配置:
- 进入 Authentication(客户端认证)页面。
- 如需使用 Webhook 等外部认证器,点击 Create Authenticator(创建认证器),选择类型、填写名称与配置后点击 Create;密码认证器为内置实例,无需创建。
- 在各协议配置区域,为目标协议(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
该服务对放行的连接返回如下响应:
{
"result": "success",
"data": {
"id": "device-42",
"attrs": { "team": "sensors" }
}
}FlowMQ 据此将身份标识设为 device-42、属性设为 { "team": "sensors" },可在授权策略中以 ${principal.attributes.team} 引用。