当前位置: 首页 > news >正文

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;
}

http://www.lqws.cn/news/537913.html

相关文章:

  • 生物化学 PCR(聚合酶链式反应)引物 制造(固相磷酰胺化学法) 购买 存储
  • 如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境
  • MySQL事物隔离级别详解
  • 笔记04:层叠的定义及添加
  • 链表基本功(相交链表)
  • Ubuntu通过防火墙管控Docker容器
  • Go语言与云原生:Kubernetes Operator开发全流程
  • Selenium+Pytest自动化测试框架实战
  • 第十二章:温度传感器拓展模块
  • 《汇编语言:基于X86处理器》第5章 过程(1)
  • LeetCode 2311.小于等于 K 的最长二进制子序列:贪心(先选0再选1)-好像还是比灵神写的清晰些
  • Python打卡:Day36
  • 永磁无刷电机旋转原理
  • 数据结构进阶 第六章 树与二叉树
  • 15.三数之和
  • 教程 | 一键批量下载 Dify「Markdown 转 Docx」生成的 Word 文件(附源码)
  • GraphQL注入 -- GPN CTF 2025 Real Christmas
  • Spring Boot高并发 锁的使用方法
  • 与 AI 聊天更顺畅:cat_code.py
  • [深度学习][python]yolov13+bytetrack+pyqt5实现目标追踪
  • 数据结构进阶 - 第九章 排序
  • Docker安装Mysql、配置文件挂载、修改Mysql编码
  • C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值
  • 什么是谓词下推?
  • leetcode:50. Pow(x, n)(python3解法,数学相关算法题)
  • 苍穹外卖day3--公共字段填充+新增菜品
  • 桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏
  • 超声波清洗机相对于传统清洗方法有哪些优势?
  • 博客系统测试报告
  • 互联网大厂Java求职面试:RAG系统架构设计与实战