提问人:Luis Landázuri 提问时间:11/15/2023 更新时间:11/15/2023 访问量:53
如何在不暴露凭据(用户名和密码)的情况下从 JavaScript 客户端 (React) 连接到 MQTT 代理
How to Connect to an MQTT Broker from a JavaScript Client (React) Without Exposing Credentials (username and password)
问:
我正在尝试将我的 React 应用程序安全地连接到我的 Mosquitto MQTT 代理,而不会暴露我的用户名和密码,因为任何人都可以访问 js 代码并可以看到凭据。
到目前为止,我考虑的选项如下:
使用 mqtt.js 直接连接我的客户端会暴露我的用户名和密码。因此,我正在考虑构建一个 API,如果用户经过身份验证(比如说 JWT),它会返回我的凭据。但是,有人担心,如果有人获得对用户令牌的访问权限,他们将能够检索用户名和密码,从而降低此方法的安全性。
构建一个连接到 MQTT 代理的 API,将数据保存在 MongoDB 中,然后公开端点以访问数据。虽然这是我目前正在研究的,但它似乎从根本上存在缺陷,因为我最终可能会失去 MQTT 的许多有利功能。在这种情况下,可能值得考虑完全放弃 MQTT。
我想知道是否可以在后端添加用户名和密码并将 mqtt 连接返回给客户端,使用后端作为某种中间件来添加缺失的信息,前提是 jwt 有效。
我知道我可以使用MQTT的自定义插件来验证我的JWT令牌,但由于可能增加复杂性,我不倾向于此选项。构建和配置代理和插件可能会引入其他问题来源。
答:
由于安全性似乎不是问题,并且只需要通过注释中的说明直接从 yoru 客户端连接到 mqtt 而不暴露用户凭据的方法,因此您可以通过在配置文件中设置(通常是 mosquitto.conf,取决于未指定的安装方法)完全在 mosquitto 中完全禁用用户名和密码的需求:
allow_anonymous true
一旦您消除了对凭据的需求,就没有什么可公开的了。
正如我在评论中所说,只有您可以评估您的安全需求。这是危险的,只是一个建议,因为原作者坚持在不考虑安全性的情况下找到一种方法。
评论
CONNECT
AUTH