为何输入错误凭证仍能在Arduino中连接MQTT服务器?
这事儿其实挺常见的,我来帮你拆解下背后的原因和验证方法:
为什么错误凭证还能成功连接?
核心原因是你用的broker.mqtt-dashboard.com(Eclipse官方的公共MQTT测试服务器)默认允许匿名连接!它根本不会校验你设置的用户名、密码,甚至clientid填错了也能连上——除非刚好有另一个活跃客户端用了完全相同的clientid,这时候后连的会把前一个踢下线,但这种情况在公共服务器里概率很低。
另外你提到用MQTT Box作为代理,这里可能有点混淆:如果你的Arduino代码里指定的是broker.mqtt-dashboard.com,那实际连接的是公共测试服务器,而不是你本地的MQTT Box。除非你把MQTT Box配置成了这个公共服务器的转发代理,但大概率是你搞混了目标服务器地址。
验证凭证是否真的生效的步骤
- 切换到本地验证服务器:把代码里的
mqttserver改成你本地MQTT Box的IP地址(比如192.168.1.100),然后在MQTT Box里开启身份验证功能,设置正确的用户名和密码。这时候再用错误的凭证编译上传代码,你会发现连接直接失败,这就能证明凭证校验是正常工作的。 - 测试公共服务器的匿名特性:打开MQTT Box,直接连接
broker.mqtt-dashboard.com,不填用户名和密码,点击连接——你会发现一样能成功,这就实锤了公共服务器允许匿名访问的特性。 - 验证clientid的冲突限制:用MQTT Box和Arduino同时用完全相同的clientid连接公共服务器,先连的那个会被后连的踢下线,这是MQTT协议的规范,但如果只是clientid填错(不是重复),服务器根本不会管。
怎么让你的凭证真正起作用?
只有当你连接的MQTT服务器启用了强制身份验证时,你设置的username和password才会被服务器校验。比如:
- 如果你用本地Mosquitto服务器,修改配置文件,设置
allow_anonymous false,并通过mosquitto_passwd工具创建密码文件; - 如果你用MQTT Box作为服务器,在设置里开启身份验证,添加合法的用户信息。
这时候再用错误的凭证连接,就会被服务器拒绝了。
内容的提问来源于stack exchange,提问作者Wan Street
相关产品推荐
相关产品推荐

