新闻详情

新闻详情

首页 / 资讯中心 / 详情

EMQX MQTT 文件传输(File Transfer)REST 接口的命名空间访问控制

发布时间:2026/11/8 23:21:11来源:尧图网络
EMQX MQTT 文件传输(File Transfer)REST 接口的命名空间访问控制
后端物联网消息队列通信【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址https://gitcode.com/gh_mirrors/em/emqx点击查看免费下载本篇文章聚焦 EMQX 中 MQTT 文件传输File Transfer功能的一组安全变更文件列表与下载相关的 REST 接口现在仅对全局非命名空间Dashboard 用户与 API Key 开放命名空间namespace用户与 API Key 将无法再读取其命名空间之外客户端上传的文件。文章将结合 changes/ee/fix-18315.en.md 变更记录与 emqx_ft 模块源码说明接口定义、权限边界、调用链与升级影响帮助读者理解并适配这一访问控制策略。背景MQTT 文件传输与文件管理 REST 接口EMQX 的 MQTT 文件传输File Transfer功能允许客户端通过 MQTT 协议以分段segment方式上传/下载文件并支持通过 REST API 对已上传文件进行查询与下载。文件管理相关的 HTTP 接口定义在 emqx_ft_api.erl 中路径前缀为file_transfer路径方法说明/file_transfer/filesGET分页列出文件支持游标following与limit/file_transfer/files/:clientid/:fileidGET按客户端 ID 与文件 ID 查询指定传输的文件信息/file_transferGET / PUT读取 / 更新文件传输配置转发至/configs/file_transfer上述接口均由namespace() - file_transfer见 emqx_ft_api.erl标识其 API 命名空间并声明scopes() - ?SCOPE_CONNECTIONS绑定连接相关权限范围。本次变更changes/ee/fix-18315.en.md的核心内容是文件列表与下载相关 REST 接口仅对全局非命名空间Dashboard 用户和 API Key 开放。命名空间用户与 API Key 将无法读取其命名空间之外客户端上传的文件。变更内容解读原变更记录原文MQTT File Transfer file listing and download REST endpoints are now available only to global (non-namespaced) Dashboard users and API keys. Namespaced users and API keys can no longer read files uploaded by clients outside their namespace.将其拆解为两个层面全局global用户与 API Key不受影响仍可完整调用文件列表与下载接口读取集群内任意客户端上传的文件命名空间namespaced用户与 API Key访问文件列表 / 下载接口时将受到限制无法读取其命名空间之外的客户端上传文件。什么是“命名空间”用户在 EMQX Dashboard 权限体系中管理员admin用户记录会携带命名空间信息。从 emqx_dashboard_admin.erl 源码可见管理员记录的namespace字段默认取?global_ns全局命名空间命名空间化namespaced的管理员在创建时会写入所属命名空间且源码中明确存在changing_namespace_is_forbidden的校验emqx_dashboard_admin.erl即命名空间一经创建不可修改命名空间化管理员被 RBAC 限制为不能变更系统级配置emqx_dashboard_admin.erl。因此本次变更实质上是在既有“全局 / 命名空间”管理员模型之上对文件传输的文件读取接口施加了命名空间隔离约束。文件列表与查询接口的源码级调用链1. 接口入口与开关检查两个文件接口在 schema 定义中均挂载了check_ft_enabled/2过滤器emqx_ft_api.erlschema(/file_transfer/files) - #{ operationId /file_transfer/files, filter fun ?MODULE:check_ft_enabled/2, get #{ tags ?TAGS, description ?DESC(file_list), parameters [ ref(following), ref(emqx_dashboard_swagger, limit) ], ... } };check_ft_enabled/2emqx_ft_api.erl先检查emqx_ft_conf:enabled()若文件传输功能未启用则返回503 SERVICE_UNAVAILABLEcheck_ft_enabled(Params, _Meta) - case emqx_ft_conf:enabled() of true - {ok, Params}; false - {503, error_msg(SERVICE_UNAVAILABLE)} end.2. 文件列表接口/file_transfer/files(get, ...)emqx_ft_api.erl解析查询参数后调用存储后端limit每页条数默认取emqx_mgmt:default_row_limit()following可选游标用于从指定位置继续分页游标非法时返回400 BAD_REQUEST。/file_transfer/files(get, #{query_string : QueryString}) - try Limit limit(QueryString), Query case maps:get(following, QueryString, undefined) of undefined - #{limit Limit}; Cursor - #{limit Limit, following Cursor} end, case emqx_ft_storage:files(Query) of {ok, Page} - {200, format_page(Page)}; {error, _} - {503, error_msg(SERVICE_UNAVAILABLE)} end catch error:{badarg, cursor} - {400, error_msg(BAD_REQUEST, Invalid cursor)} end.3. 单文件信息查询接口/file_transfer/files/:clientid/:fileid(get, ...)emqx_ft_api.erl以路径参数clientid、fileid组成传输标识查询指定文件信息文件不存在时返回404 FILES_NOT_FOUND/file_transfer/files/:clientid/:fileid(get, #{ bindings : #{clientid : ClientId, fileid : FileId} }) - Transfer {ClientId, FileId}, case emqx_ft_storage:files(#{transfer Transfer}) of {ok, Page} - {200, format_page(Page)}; {error, [{_Node, enoent} | _]} - {404, error_msg(FILES_NOT_FOUND)}; {error, _} - {503, error_msg(SERVICE_UNAVAILABLE)} end.4. 存储层文件查询分发emqx_ft_storage:files/0,1emqx_ft_storage.erl将查询请求按当前配置的存储后端local FS 或 S3分发files() - files(#{}). files(Query) - dispatch(files, [Query]). dispatch(Fun, Args) when is_atom(Fun) - {Type, Storage} backend(), apply(mod(Type), Fun, [Storage | Args]).存储后端的files/2回调约定定义在 emqx_ft_storage.erl由文件系统后端如 emqx_ft_storage_fs.erl与 S3 导出后端emqx_ft_storage_exporter_fs_api.erl实现。其中导出后端的 API spec 同样复用了emqx_ft_api:check_ft_enabled/2过滤器emqx_ft_storage_exporter_fs_api.erl确保下载/导出链路与列表接口保持一致的功能开关行为。5. 响应格式化查询结果通过format_page/1与format_file_info/1emqx_ft_api.erl组装为统一 JSON 结构files数组包含name、size、timestampRFC3339 格式、clientid、fileid、uri若文件带有元数据metadata则一并返回分页场景下额外携带cursor字段供客户端续页。变更对使用方的影响对全局用户与 API Key行为不变仍可调用GET /api/v5/file_transfer/files与GET /api/v5/file_transfer/files/{clientid}/{fileid}读取集群内全部客户端上传的文件现有脚本、告警系统与运维工具的调用无需调整。对命名空间用户与 API Key文件列表与下载接口的访问将受到命名空间边界约束无法读取其命名空间之外客户端上传的文件建议运维侧核查使用了命名空间化 Dashboard 用户或 API Key 的文件管理脚本确认其访问范围与预期一致若需要跨命名空间管理文件应改用全局非命名空间用户或 API Key并配合 Dashboard RBAC 做最小权限收敛。升级与兼容性提示该变更不改变 emqx_ft_schema.erl 中file_transfer的配置项结构与/file_transfer配置读写接口的转发逻辑emqx_ft_api.erl文件传输功能本身的 MQTT 侧上传、下载、断点续传能力不受影响变更仅收紧 REST 层的文件读取权限不涉及存储后端数据迁移升级后建议在测试环境用全局与命名空间两类凭据各验证一次文件列表与下载接口确认权限符合预期后再灰度到生产。小结本次变更changes/ee/fix-18315.en.md为 EMQX MQTT 文件传输的文件列表与下载 REST 接口引入了基于 Dashboard 命名空间的访问控制全局用户与 API Key 行为不变命名空间用户与 API Key 被限制在其命名空间范围内。从源码看该约束建立在既有全局 / 命名空间管理员模型之上贯穿 emqx_ft_api.erl 的接口定义与 emqx_dashboard_admin.erl 的命名空间管理逻辑属于对文件管理 API 的权限收紧不影响 MQTT 侧文件传输功能本身。赞分享后端物联网消息队列通信【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址https://gitcode.com/gh_mirrors/em/emqx点击查看免费下载相关推荐EMQX 文件传输File Transfer over MQTTemqx_ft 应用配置与存储后端实战指南EMQX 文件传输File Transfer over MQTT emqx_ft 应用配置与存储后端实战指南 本指南以 apps/emqx_ft/READ后端物联网消息队列通信file-transfer-go革命性P2P文件传输工具的完整指南file transfer go革命性P2P文件传输工具的完整指南 在当今数字化时代 文件传输 已成为我们日常工作和生活中不可或缺的一部分。然而传统的文件后端前端即时通讯Tiptap 3.x 升级指南从 2 到 3 的完整迁移方案Tiptap 3.x 升级指南从 2 到 3 的完整迁移方案 Tiptap 3 迁移属于架构级破坏性升级包结构、扩展定义 API、存储作用域都变了不是能直前端富文本UI组件插件系统上一篇终极指南如何在多个设备间实现剪贴板内容同步下一篇效率翻倍pot-desktop快捷键全攻略4大场景操作指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/8 22:42:07

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/8 2:22:29

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/8 8:25:50

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/8 22:41:24

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/8 3:02:34

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/8 3:02:33

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉