文章适用于EMQ X Broker 4.3.5版本
Mnesia 认证使用 EMQX 内置 Mnesia 数据库存储客户端 Client ID/Username 与密码,支持通过 HTTP API 管理认证数据。
Mnesia 认证不依赖外部数据源,使用上足够简单轻量。
首先启动插件emqx_auth_mnesia
加密方式
Mnesia 认证默认使用 sha256 进行密码哈希加密,可在 /etc/emqx/plugins/emqx_auth_mnesia.conf
中更改:
1 | # etc/plugins/emqx_auth_mnesia.conf |
配置哈希方法后,新增的预设认证数据与通过 HTTP API 添加的认证数据将以哈希密文存储在 EMQ X 内置数 据库中。
预设认证
可以通过配置文件预设认证数据,编辑配置文件:/etc/emqx/plugins/emqx_auth_mnesia.conf
预设认证数据格式兼容 emqx_auth_clientid
与 emqx_auth_username
插件的配置格式
1 | # etc/plugins/emqx_auth_mnesia.conf |
插件启动时将读取预设认证数据并加载到 EMQX 内置数据库中,节点上的认证数据会在此阶段同步至集群中。
预设认证数据在配置文件中使用了明文密码,出于安全性与可维护性考虑应当避免使用该功能。
HTTP API 管理认证
EMQ X提供了对应的HTTP API用以维护内置数据源中的认证信息,我们可以用API调试工具,通过EMQX提供的API接口添加/查看/取消/更改认证数据
这里通过VSCode来访问EMQ X的API。VSCode需要安装REST Client插件。
创建一个.http
文件,定义好相关的内容
1 | # EMQX服务器地址 |
查看已添加的认证数据
- 查看username认证数据
1 | #############查看已有用户认证数据############## |
- 查看clientid认证数据
1 | #############获取所有详细信息######## |
添加认证数据
- 添加username认证数据
使用 POST 请求添加 username 为 user password 为 123456 的认证信息,返回信息中 code = 0 即为成 功。
1 | ########添加用户认证数据############## |
- 添加clientid认证数据
使用 POST 请求添加 clientid 为 emq-client1 password 为 123456 的认证信息,返回信息中 code = 0 即 为成功。
1 | ####添加clientId和密码##### |
更改已添加的认证数据
- 更改指定username的密码
指定用户名,传递新密码进行更改,再次连接时需要使用新密码进行连接:
1 | ###########更改指定用户名的密码############# |
- 更改指定 Client ID 的密码API
指定 Client ID,传递新密码进行更改,再次连接时需要使用新密码进行连接:
1 | #############更改指定 Client ID 的密码######## |
查看指定的认证数据
注意此处返回的密码是使用配置文件指定哈希方式加密后的密码:
- 查看指定username信息
1 | ###########查看指定用户名信息############# |
- 查看指定clientid信息
1 | #############获取指定ClientId详细信息######## |
删除指定的认证数据
- 删除指定username
1 | ###########删除指定的用户信息############# |
- 删除指定clientid
1 | #############删除指定的client信息######## |
批量添加认证数据
和添加认证数据用到的接口相同,只是参数不同。
- 批量添加username
1 | ########批量添加用户认证数据############## |
- 批量添加clientid
1 | ########批量添加Cilent ID认证数据############## |