EMQ X Broker 配置HTTP 的外部鉴权接口

        在 EMQ X Broker 中可以通过配置 ACL(Access Control List,访问控制列表) 来实现。EMQ X 提供了多种 ACL 插件机制,其中最常用、也最适合企业级使用的方案是:基于 HTTP 的外部鉴权接口(emqx_auth_http / emqx_acl_http)。

一、目标

  • 客户端连接 MQTT Broker 时,先进行用户名/密码认证;
  • 客户端尝试订阅或发布某个主题时,Broker 向外部服务发起请求;
  • 外部服务根据业务逻辑判断是否允许该操作;
  • 只有授权通过的客户端才能订阅或发布指定主题;

二、交互流程

三、配置步骤

1. 启用插件

emqx_ctl plugins load emqx_auth_http
emqx_ctl plugins load emqx_acl_http

2. 修改配置文件

编辑《认证配置-控制用户登录》 etc/plugins/emqx_auth_http.conf 文件,配置如下内容:

# 用户认证请求地址
auth.http.auth_req = http://my-auth-server/auth/login

# 请求方法
auth.http.auth_req.method = post

# 发送参数(clientid=%c, username=%u, password=%P)
auth.http.auth_req.params = clientid=%c,username=%u,password=%P

编辑《鉴权配置-主题访问控制》

# ACL 鉴权请求地址
auth.http.acl_req = http://my-auth-server/auth/acl

# 请求方法
auth.http.acl_req.method = post

# 参数:
# %A: access 类型 (1=订阅, 2=发布)
# %u: username
# %c: clientid
# %t: topic
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,topic=%t

3. 实现外部鉴权服务(关键部分)

你需要在自己的后端服务中提供两个接口:

接口1:用户认证接口 /auth/login

  • 如果返回 "result": true,表示认证成功;
  • 如果返回 "result": false,则拒绝连接。

返回示例(JSON):

{
  "result": true,
  "msg": "ok"
}

接口2:主题权限接口 /auth/acl

  • access=1 表示订阅操作;
  • access=2 表示发布操作;

返回示例(JSON):

{
  "result": true,
  "msg": "ok"
}
  • 如果返回 "result": true,表示允许访问;
  • 如果返回 "result": false,则禁止访问。

Java代码示例:

@PostMapping("/auth/acl")
public Map<String, Object> checkAcl(
    @RequestParam String username,
    @RequestParam String topic,
    @RequestParam int access) {

    // 数据库查出用户的主题权限
    String allowedTopic = getUserAllowedTopic(username);
    // 实现通配符匹配逻辑
    boolean isMatch = matchTopic(allowedTopic, topic); 

    Map<String, Object> result = new HashMap<>();
    if (isMatch) {
        result.put("result", true);
    } else {
        result.put("result", false);
        result.put("msg", "Permission denied");
    }
    return result;
}

### 如何搭建MQTT云服务器 #### 选择合适的平台和服务 为了构建一个稳定可靠的MQTT云服务器,可以选择像阿里云这样的云计算服务平台。这类服务提供了全面的支持和工具来简化部署过程。 #### 创建账号并登录控制台 访问所选服务商网站注册账户,并通过验证后进入管理后台操作界面[^1]。 #### 配置网络环境 确保已设置好VPC虚拟私有云以及相应的安全组规则允许外部访问所需的端口(如TCP/SSL/WebSocket),对于EMQ X Broker默认监听的是1883端口号用于非加密传输;如果要启用TLS则需配置443或其他指定的安全通道端口[^2]。 #### 安装与启动Broker软件 在实例上安装开源的消息代理程序比如EMQ X Enterprise Edition 或 Community Edition版本。可以通过官方文档获取具体命令行指导完成这一步骤。完成后记得开启服务并检查状态确认正常运行。 #### 注册应用及生成凭证 前往物联网套件IoT Hub创建新产品类别下的实际物理装置条目,记录下分配给它的唯一标识符、密钥等信息作为后续依据的一部分。 #### 测试连通性 编写简单的客户端测试脚本尝试向目标地址发起订阅/发布请求动作以检验整个链路是否畅通无阻。Python示例代码如下: ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print(f"Connected with result code {rc}") client = mqtt.Client() client.on_connect = on_connect # Replace these values according to your setup. broker_address="your_broker_ip" port=1883 username='device_name' password='device_password' client.username_pw_set(username,password) client.connect(broker_address,port) try: client.loop_forever() except KeyboardInterrupt: pass finally: client.disconnect() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值