【问题标题】:What are the information(Ex: device ID, MAC etc...) will be sent to MQTT server in the background when we create a connection?当我们创建连接时,会在后台向 MQTT 服务器发送哪些信息(例如:设备 ID、MAC 等)?
【发布时间】:2014-12-19 05:56:08
【问题描述】:

我们可以阻止设备连接到 MQTT 服务器吗?

我们可以阻止设备订阅主题吗?

我们在 MQTT 服务器上是否有任何设备注册。所以我们只能允许已知设备?如果我们有一些注册机制,我们可以使用 API 动态完成吗?

【问题讨论】:

    标签: android mqtt mosquitto iot hivemq


    【解决方案1】:

    HiveMQ 和 mosquitto 等流行的 MQTT 代理允许身份验证和授权。如果您碰巧使用 HiveMQ,则有一个 file authentication plugin 可用,它允许您通过用户名/密码限制对代理的访问。

    如果您已经拥有可以使用 Java 调用的 API 等身份验证机制(例如 HTTP REST API、SOAP Web 服务、数据库等),那么使用 the plugin system 将其插入 HiveMQ 非常容易。您可以看到与数据库here on Github 集成的示例插件。另一个你可以看的插件是Stormpath plugin,源代码也是available on Github

    强制性免责声明:我为 HiveMQ 背后的公司工作。

    【讨论】:

    • 正如另一个答案中提到的“使用最后一个 MQTT 3.1.1 规范,在 SUBACK 消息中,您可以设置拒绝订阅的错误。在这种情况下,还取决于代理实现如何阻止设备从订阅。” hivemq 支持吗?
    • 是的,因为 HiveMQ 2.0 支持开箱即用。 MQTT 3.1.1 规范已完全实现,HiveMQ 通过了 2014 年 MQTT 互操作性测试,所有 MQTT 3.1.1 功能 100%
    【解决方案2】:

    一些特性与代理实现密切相关,而另一些则取决于 MQTT 规范。

    当客户端连接到代理时,它会提供客户端 ID 和(可选)用户名和密码。与具体的代理实现相关,它可以提供一种身份验证机制,以便您可以根据客户端 ID、用户名和密码阻止设备连接。

    在最新的 MQTT 3.1.1 规范中,您可以在 SUBACK 消息中设置拒绝订阅的错误。同样在这种情况下,取决于代理实现如何阻止设备订阅。

    如您所见,MQTT 规范为您提供了一些身份验证机制的功能,但这些功能是否可用(并且以不同的方式)取决于特定的代理实现。

    保罗。

    【讨论】: