Mosquitto MQTT服务器如何支持匿名与认证用户并限制主题访问?
解决匿名用户访问受限主题的ACL配置问题
你的配置失效的核心原因是没有明确将拒绝规则绑定到匿名用户,单独的topic deny语句不会自动应用到匿名客户端上。以下是针对不同MQTT Broker的修正方案:
Mosquitto 配置示例
# 开启匿名连接 allow_anonymous true # 明确为匿名用户设置规则:拒绝访问/my/topic,允许其他所有主题 user anonymous topic deny /my/topic topic readwrite # # 认证用户special的权限配置 user special topic readwrite /my/topic
EMQ X 配置示例
allow_anonymous = true # 匿名用户允许订阅所有主题,但拒绝访问/my/topic {allow, {user, "anonymous"}, subscribe, ["#"]}. {deny, {user, "anonymous"}, subscribe, ["/my/topic"]}. {deny, {user, "anonymous"}, publish, ["/my/topic"]}. # 认证用户special拥有/my/topic的读写权限 {allow, {user, "special"}, subscribe, ["/my/topic"]}. {allow, {user, "special"}, publish, ["/my/topic"]}.
关键注意事项
- 规则匹配是自上而下执行的,务必将匿名用户的拒绝规则放在允许规则之前,确保优先级正确
- 修改配置后需要重启MQTT Broker才能生效
- 测试时用匿名客户端尝试订阅/发布
/my/topic,验证是否被拦截,同时测试其他主题是否正常访问
内容的提问来源于stack exchange,提问作者Some random IT boy
相关产品推荐
相关产品推荐

