【发布时间】:2026-02-05 19:10:02
【问题描述】:
我想在我的平台中集成 MQTT 和 Mosquitto。看来我可以进行用户身份验证(用户/密码,但我更喜欢基于令牌,但这是另一个问题)。 我读到的所有内容似乎都在处理用户是否可以访问服务器,但不确定我是否可以建立权限来限制客户端是否可以订阅特定的发布(unix 中的文件权限)
我正在查看文档,似乎没有选项可以处理它或委派此控制,所以我想它无法完成。但我很想知道
【问题讨论】:
我想在我的平台中集成 MQTT 和 Mosquitto。看来我可以进行用户身份验证(用户/密码,但我更喜欢基于令牌,但这是另一个问题)。 我读到的所有内容似乎都在处理用户是否可以访问服务器,但不确定我是否可以建立权限来限制客户端是否可以订阅特定的发布(unix 中的文件权限)
我正在查看文档,似乎没有选项可以处理它或委派此控制,所以我想它无法完成。但我很想知道
【问题讨论】:
mosquitto doc 应该很清楚,它涵盖了身份验证和授权。
开箱即用的 mosquitto 支持保存用户名/密码信息的密码文件(由 password_file 配置参数指定)。这与将 allow_annonymous 参数设置为 false 相结合,将确保您只能以经过身份验证的用户身份连接到代理。
acl_file 配置选项指向控制给定用户可以订阅或发布的主题的 ACL 列表。它使用以下格式:
user <username>
topic [read|write|readwrite] <topic>
pattern [read|write|readwrite] <topic-pattern>
用户名,后跟给出特定主题或主题模式的行以及该用户应具有的访问权限级别。 (模式可以包含%c 来代替clientID 或%u 来代替用户名)。
除了基于文件的支持外,mosquitto 还具有身份验证插件 api,这意味着您可以将所有信息卸载到可以在数据库中查找用户和 acls 的代码中。 JPMens 有一个示例插件https://github.com/jpmens/mosquitto-auth-plug
【讨论】: