目錄
- 一、認證
- 1.1 創建認證器
- 1.2 多認證器
- 二、授權
- 2.1 ACL文件授權配置
- 2.2 使用內置數據庫授權配置
一、認證
認證:就是驗證客戶端的身份。
1.1 創建認證器
- 選擇認證方式
- 配置數據源
- 配置數據源的相關參數
認證器創建之后,在使用客戶端連接Dashboard時,就需要用戶名以及密碼的驗證了
1.2 多認證器
Dashboard可以創建多個認證器,認證的過程從上往下依次執行。
建表語句
DROP TABLE IF EXISTS `mqtt_user`;
CREATE TABLE `mqtt_user` (`id` int(0) NOT NULL,`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`password_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of mqtt_user
-- ----------------------------
INSERT INTO `mqtt_user` VALUES (1, 'root', '63a9f0ea7bb98050796b649e85481845', NULL);SET FOREIGN_KEY_CHECKS = 1;
MySQL查看MD5加密之后的數據
SELECT MD5('root');
二、授權
通常情況下,認證只是驗證了客戶端身份是否合法,而客戶端是否具備發布、訂閱某些主題的權限,還需要授權系統來判斷,在EMQX中,授權是指對MQTT客戶端的發布和訂閱操作進行權限控制
。
2.1 ACL文件授權配置
每一條授權獨占一行,由四部分組成,使用點(.)進行分割。
{allow, all, subscribe, ["$SYS/#", "#"]}.
第一部分:規則對應的權限,
- allow:允許
- deny:禁止
第二部分:適用此規則的客戶端
- all:匹配所有客戶端
- {username, “admin”}:指定單用戶
- {username, {re, “^dash”}}:正則匹配用戶
- {clientid, “admin”}:指定單客戶端ID
- {clientid, {re, “^dash”}}:正則匹配客戶端ID
- {ipaddr, “127.0.0.1”}:指定單IP地址
- {ipaddr, [“127.0.0.1”, …]}:指定多IP地址
- {‘and’, [Spec1, Spec2, …]}:滿足列表中所有規范的客戶端
- {‘or’, [Spec1, Spec2, …]}:滿足列表中任意規范的客戶端
第三部分:指定規則對應的操作
- publish:發布消息
- subscribe:訂閱消息
- all:發布和訂閱
第四部分:指定規則適用的MQTT主題,支持通配符,可以使用主題占位符
- {allow, all}:允許所有請求
- {deny, all}:禁止所有請求
"t/${clientid}"
:使用主題占位符,當客戶端ID為emqx_c的客戶端觸發檢查時,將精準匹配t/emqx_c主題。"$SYS/#"
:通配符匹配$SYS
開頭的所有主題,例如:$SYS/foo
、$SYS/foo/bar
。{eq, "foo/#"}
:精確匹配foo/#
主題,主題foo/bar
將無法匹配,此處eq
表示全等比較。
2.2 使用內置數據庫授權配置