You need to enable JavaScript to run this app.
文档中心
云原生消息引擎

云原生消息引擎

复制全文
下载 pdf
创建客户端认证
创建 Password-Based 认证
复制全文
下载 pdf
创建 Password-Based 认证
本文档介绍在 MQTT Dashboard 中创建 Password-Based 认证的操作步骤。​
前提条件​
使用 MySQL 作为数据源时,请先确保以下事项:​
  • 目标 MySQL 实例处于正常运行状态。​
注意事项​
相关注意事项,请参见注意事项。​
操作步骤​
  1. 在 Dashboard 导航栏选择访问控制 > 客户端认证,然后单击页面右上角的创建。​
  1. 选择 Password-Based 认证方式,然后单击下一步。​
  1. 选择数据源,然后单击下一步。​
  1. 在配置参数向导页下,配置参数,并在参数配置完成后,单击创建。​
  • 选择的数据源不同,需要配置的参数不同。​
创建内置数据库认证​
​Image​​
​
参数​
说明​
账号类型​
指定客户端身份 ID 认证的字段,可根据业务需要选择 username 或 clientid。​
密码加密方式​
选择存储密码时使用的散列算法,如 plain、md5、sha、bcrypt、pbkdf2 等。​
选择不同的加密方式,需要配置不同的参数。​
  • 选择 plain、md5、sha 加密法方式​
  • 需要配置 加盐方式,指定盐和密码的组合方式,一般无需更改此项,可选:​
  • disable:不启用​
  • prefix:在密码头部加盐​
  • suffix:在密码尾部加盐​
  • 选择 bcrypt 加密方式​
  • 需要配置 Salt Rounds,指定散列需要的计算次数,也称成本因子。数值越高,加密的安全性越高,但相应的用户验证的耗时也会增加,请根据业务需求进行配置。​
  • 选择 pkbdf2 加密方式​
  • 需要配置以下参数:​
  • 伪随机函数:指定生成密钥使用的散列函数,如 sha256 等。​
  • 迭代次数:指定散列次数,默认值为 4096。​
  • 密钥长度:指定希望得到的密钥长度。如不指定,密钥长度将由伪随机函数确定。​
​
创建 MySQL 认证​
​Image​​
​
参数​
说明​
服务​
填写查询的 MySQL 实例的私网访问地址。​
格式为 {私网域名}:{端口}。​
数据库​
填写查询的数据库名称。​
用户名​
填写用户名。​
注意​
确保对应用户具备指定数据库的读写权限。​
密码​
填写密码。​
启用 TLS​
配置是否启用 TLS 校验,以及是否校验服务器证书。​
如需校验,请分别配置 Cert 和 Key。​
连接池大小​
配置 MQTT 到指定 MySQL 数据库的并发连接数。​
默认值为 8,您可根据业务需求配置为其他整数值。​
查询超时​
指定连接超时等待时长。​
默认为 5 秒,您可根据业务需求配置为其他整数值,可选单位:毫秒、秒、分钟、小时。​
密码加密方式​
选择存储密码时使用的散列算法,如 plain、md5、sha、bcrypt、pbkdf2 等。​
选择不同的加密方式,需要配置不同的参数。​
选择使用 plain、md5、sha、sha256、sha512 加密方式​
加盐方式:用于指定盐和密码的组合方式,一般无需更改此选项。​
  • disable:不启用​
  • prefix:在密码头部加盐​
  • suffix:在密码尾部加盐​
选择使用 pbkdf2 加密方式​
  • 伪随机函数:指定生成密钥使用的散列函数,如 sha256 等。​
  • 迭代次数:指定散列次数,默认值为 4096。​
  • 密钥长度:指定希望得到的密钥长度。如不指定,密钥长度将由伪随机函数确定。​
SQL​
根据表结构,填写查询 SQL 语句,具体要求请参见 SQL 表结构与查询语句。​
​
SQL 表结构与查询语句​
MQTT 支持多种 MySQL 表结构、多个表结构联合查询,或者从视图中查询。您只需要提供一个查询的 SQL 模板,确保查询结果中包含以下字段:​
​
字段​
说明​
password_hash​
数据库中的明文或散列密码字段。​
salt(可选)​
为空或不存在时视为空盐(salt = "")。​
is_superuser(可选)​
标记当前客户端是否为超级用户,取值如下:​
  • true:为超级用户。​
  • false(默认):非超级用户。​
​
  • 示例表结构​
  • 在指定数据库中创建如下表结构:​
  • ​
    CREATE TABLE `mqtt_user` (​
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,​
    `username` varchar(100) DEFAULT NULL,​
    `password_hash` varchar(100) DEFAULT NULL,​
    `salt` varchar(35) DEFAULT NULL,​
    `is_superuser` tinyint(1) DEFAULT 0,​
    `created` datetime DEFAULT NULL,​
    PRIMARY KEY (`id`),​
    UNIQUE KEY `mqtt_username` (`username`)​
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;​
    ​
说明​
以上示例中创建了一个有助于查询的隐式 UNIQUE 索引字段( username )。当系统中有大量用户时,请确保查询使用的表已优化并使用有效的索引,以提升大量连接时的数据查找速度并降低 MQTT 负载。​
  • 添加认证信息​
  • 在表 mqtt_user 中添加认证信息的示例如下:​
  • 认证信息:用户名为 mqtt_u1,密码为 password0123,盐值为 slat_foo123,散列方式为 sha256,超级用户标志为 true。​
  • ​
    mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('mqtt_u1', SHA2(concat('password0123', 'slat_foo123'), 256), 'slat_foo123', 1);​
    Query OK, 1 row affected (0,01 sec)​
    ​
  • SQL 查询语句​
  • 以 {username} 作为查询条件,在表 mqtt_acl 中查询客户端认证信息的查询语句如下:​
  • ​
    SELECT password_hash, salt, is_superuser FROM mqtt_user WHERE username = ${username} LIMIT 1​
    ​
​
​
最近更新时间:2025.08.08 16:44:28
这个页面对您有帮助吗?
有用
有用
无用
无用