我有一个在浏览器中运行的客户端应用程序,我无法更改实现MQTT客户端的实现,例如mqtt on npm。
库中的代码如下,允许我传入socketUrl
const ws = new WebSocket(socketUrl)
我已经尝试为IoT生成预签名URL,这似乎在验证方面起作用(即没有未经授权的响应),但我得到了426升级要求的响应。
我相信我是正确的说,如果它正在工作,它会回复101切换协议,但我不太了解MQTT我不确定这是否发生,因为我做错了或因为我我没有使用MQTT。
我正在使用以下代码生成签名的网址(如果我使用此工作而不是使用固定密钥/秘密,我将切换到Cognito Identities)
const v4 = require('aws-signature-v4')
const crypto = require('crypto')
const socketUrl = v4.createPresignedURL(
'GET',
'myioturl.iot.us-east-1.amazonaws.com',
'/mqtt', // tried just /mytopic, too
'iotdevicegateway',
crypto.createHash('sha256').update('', 'utf8').digest('hex'), {
'key': 'removed',
'secret': 'removed',
'protocol': 'wss',
'region': 'us-east-1'
}
)
iot文档中的protocols page似乎暗示如果我指向/ mqtt,我表示我将使用MQTT。
mqtt指定您将通过WebSocket协议发送MQTT消息。
如果我只指定/ foobar,这意味着什么?我应该能够连接到套接字但不能使用MQTT吗?
对我来说有很多未知因素,所以我很难解决它是否应该起作用的问题,如果是的话,我做错了哪一点。