将新设备连接到代理时,如果可能的话,如何使用2FA(两因素身份验证)?
因为看起来比较容易,所以第二个因素可以首先是软件解决方案,但是我欢迎有关如何引入硬令牌(可能是RFID)的想法。
如果设备仅在第一次连接时进行身份验证,并且服务器会记住“旧”客户端,这将是有意义的。
这个想法可能不寻常或不合适-如果这是一个坏主意,请告诉我原因。
将新设备连接到代理时,如果可能的话,如何使用2FA(两因素身份验证)?
因为看起来比较容易,所以第二个因素可以首先是软件解决方案,但是我欢迎有关如何引入硬令牌(可能是RFID)的想法。
如果设备仅在第一次连接时进行身份验证,并且服务器会记住“旧”客户端,这将是有意义的。
这个想法可能不寻常或不合适-如果这是一个坏主意,请告诉我原因。
Answers:
您需要经纪人代理或网络服务器...
首先,您绝对需要连接到您的代理的身份验证服务,才能使用特定主题(/auth/RFID
,...)执行2FA 。然后,它将允许客户端发布信息(请参见下文)。
我在这里看到的第一个问题是,订阅该主题的任何人都可以阅读该主题的信息,但是您可以锁定主题!
然后,您可以告诉(强制)所有设备将信息发布到/proxy/mytopic
。使用mqtt的clientId功能,身份验证服务可以检查从该主题发送的消息是否来自先前使用2FA的经过身份验证的设备,然后代表该设备将其自己的消息发布到/proxyout/mytopic
有效负载中并带有该设备的ID。
现在的问题是检查是否可以通过身份验证接收消息的设备,因为MQTT完全是关于批量发布的。auth服务需要具有经过身份验证的设备的列表,并检查它们是否符合接收条件。同样,有效载荷加密和解密在设备端...
我认为我的解决方案对于MQTT功能来说是非常过分的。因此,您应该使用套接字或Web服务器...
即将发布的MQTT v5规范增加了对AUTH
控制数据包的支持,从而允许质询/响应身份验证。由于MQTT v5尚未最终确定,支持仍可能会发生变化,但是可以合理地假设AUTH会保持某种形式,并且可以使用2FA添加2FA。
您可以在OASIS MQTT委员会文档页面上查看该规范的当前工作草案。
为了在MQTT网络中实现2FA,我创建了以下用于身份验证的服务,这些服务已连接到Broker。
当MQTT客户端通过SSL / TLS连接到代理时,它首先将其自己的ID发布到device_id主题,ID验证程序将验证它是真实的客户端,然后调用Token Generator来生成令牌,并将该令牌发布在锁定的主题device_token上。
客户端设备获取此令牌并将其进一步发布到主题verify_token。主题在verify_token上发布后,令牌验证程序将比较主题device_token和verify_token上的值(如果匹配),将设备的ID添加到已验证的设备池中并允许设备发布数据。因为只有经过验证的设备可以连接到主题以发布数据,所以可以提高安全性。
我还使用了MQTT_KEEPALIVE配置选项来使客户端在未发送或接收任何数据时保持活动状态,以使客户端设备在设备池中保持活动状态,并防止将其添加到设备池后再次进行验证。但是出于安全考虑,我每24小时将设备固定为2FA。