前言
在 Emqx v4.x
版本,使用外部 http
做验证是通过插件的形式来实现的。到了 v5.x
的版本,将其内置了,并且将连接认证和授权区分开来,拆分成访问控制——> 认证和访问控制——>授权两个部分。
配置
打开 18083
后台管理页面,选择左侧菜单访问控制——>认证,点击右上角的 创建
按钮,选择认证方式为 Password-Based
。
点击下一步按钮,选择数据源为 HTTP Server
服务。
点击下一步按钮,开始配置, HTTP
的请求方式最好使用POST
,其余配置很简单,见文知意,这里主要介绍 Body
配置。默认的 Body
配置如下所示:
{ "username": "${username}", "password": "${password}" }点击复制复制失败已复制
其中 ${username}
和 ${password}
为插值内容,所有可选的插值如下所示:
插值 | 字段 | 含义 |
${clientid} |
clientid |
mqtt 客户端连接 emqx 时填写的 clientid 内容 |
${username} |
用户名 | mqtt 客户端连接 emqx 时填写的 username 内容 |
${password} |
密码 | mqtt 客户端连接 emqx 时填写的 password 内容 |
在认证的时候,最好将这三个字段都发送给认证服务,因此 Body
配置如下所示:
{ "clientid": "${clientid}", "username": "${username}", "password": "${password}" }点击复制复制失败已复制
服务器处理
如果认证成功,允许连接,那么 HTTP
的返回状态码一定是 200
或 204
,其余状态码均认为是认证失败,使用缺省值ignore
按照认证链继续执行认证。
返回内容要使用 JSON
格式,字段描述如下:
字段 | 含义 | 是否必传 | 类型 | 默认值 |
result |
认证结果 | 否 | "allow" | "deny" | "ignore" |
"ignore" |
is_superuser |
是否为超级用户 | 否 | boolean |
false |
注意
NestJS
对于 Post
方法默认的返回状态码是 201
,需要手动指定状态码,否则会导致 Emqx
判断为认证失败!!!