2017-08-19 52 views
2

出於安全原因,似乎IBM最近停止接受與MQTT borker的非TLS連接。使用Eclipse的PAHO MQTT庫無法連接到IBM Watson IoT平臺用於JavaScript的

我喜歡使用JavaScript從智能手機讀取加速度傳感器數據的小應用程序,並通過MQTT將其發送給消息代理。

This application已損壞。所以我試圖修復它在這fork

如前所述,非TLS連接將被拒絕,這就是爲什麼我已經啓用TLS:

 window.client.connect({ 
      onSuccess: onConnectSuccess, 
      onFailure: onConnectFailure, 
      userName: "use-token-auth", 
      password: window.password, 
      useSSL: true 
}); 

它仍然無法連接。在IBM Watson物聯網平臺上,我在日誌中看到這個錯誤,沒有其他的:

從213.55.176.207關閉連接。該操作未經授權。

現在我創建了一個小測試index.html文件。如果我作爲設備連接,它仍然不起作用,但如果我作爲應用程序進行連接,則可以看到here。但是我在平臺上創建了這些設備。如果我使用Watson IoT平臺的舊實例,它可以工作,但不適用於新實例。

我在做什麼錯?

回答

3
在您的應用程序代碼

你有這樣的:

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'a:myOrgId:'+Math.random().toString(16).substr(2, 8));

這是很好的,當應用程序連接ID的格式爲a:orgId:uniqueIdentifierForTheApplication

uniqueIdentifierForTheApplication可以是任何字符串(內允許的字符集),並且不需要預先註冊,因此在99%的情況下在這裏生成一個隨機數。

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'd:bmzc5i:'+Math.random().toString(16).substr(2, 8));

當設備連接ID

的格式爲d:orgId:typeId:deviceId。要連接設備,首先必須註冊,因此d:orgId:randomNumber的ID不起作用。

如果註冊ID爲myType設備類型的ID myDevice設備,並設置它的身份驗證令牌myToken那麼你會形成如下的連接:

window.client = new Paho.MQTT.Client("bmzc5i.messaging.internetofthings.ibmcloud.com", 8883, 'd:bmzc5i:myType:myDevice'); window.client.connect({ onSuccess: onConnectSuccess, onFailure: onConnectFailure, userName: "use-token-auth", password: "myToken", useSSL: true

此外,你應該注意當作爲設備連接和應用連接時,主題空間的差異。

當您作爲應用程序進行連接時,您具有組織範圍。因此,要發佈/代表設備的訂閱活動,你會用一個主題,如:

當您連接的設備,你有設備範圍發佈到iot-2/type/myType/id/myDevice/evt/statusEvent/fmt/json

只(這是一種安全機制限制受損設備可能造成的損害)。因此,對於設備同樣的事情與實現發佈到:

iot-2/evt/statusEvent/fmt/json

該平臺使用的裝置來進行發佈,以確定哪些設備屬於身份,而與應用程序的應用程序決定哪些設備將事件分配給。

相關問題