acautomaton
acautomaton
发布于 2023-06-25 / 57 阅读
0
0

EMQX使用JwtToken进行访问控制

一、认证

  1. 进入后台界面后,选择访问控制->客户端认证

  2. 在右上角选择创建

  3. 认证方式选择JWT

  4. JWT无需选择数据源

  5. 配置参数

    • JWT来自于password
    • 加密方式hmac-based
    • Secret填写预设的JWT私钥,关闭Base64编码
  6. 配置负载验证

    ClaimExpected Value
    clientId${clientid}
    username${username}

    负载验证可以验证JWT负载中的值(Claim)是否与建立mqtt协议的clientIdusername一致,防止身份盗用。

二、授权

  1. 进入后台界面后,选择访问控制->客户端授权
  2. 在右上角选择创建
  3. 数据源选择MySQL
  4. 配置参数
    • 服务中填写MySQL服务器的IP:Port,注意:如果EMQX服务器和MySQL服务器都位于docker容器内,不能直接使用localhost访问。使用docker inspect [containerName]查看容器间虚拟IP。
    • 数据库中填写数据库名称即可
    • 用户名和密码即为数据库的用户名和密码
    • TLS视情况自行决定
    • Pool Size连接池默认为8
    • SQL语句为从数据表中获取信息的语句,可以自定义
  5. 构造数据表(来自EMQX5.0文档的官方构造)
    CREATE TABLE `mqtt_acl` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(100) NOT NULL,
      `permission` varchar(5) NOT NULL,
      `action` varchar(9) NOT NULL,
      `topic` varchar(100) NOT NULL,
      INDEX username_idx(username),
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • permission: 用于指定操作权限,可选值有 allowdeny
    • action: 用于指定当前规则适用于哪些操作,可选值有 publishsubscribeall
    • topic: 用于指定当前规则适用的主题,可以使用主题过滤器、主题占位符主题通配符
  6. 返回客户端授权界面,右上角设置中将未匹配时执行设置为deny(即白名单制)

评论