物聯網之MQTT3.1.1和MQTT5協議 (16) AUTH 報文

前言

AUTH報文是MQTT5的新報文,MQTT3版本則沒有。

AUTH – 認證交換(MQTT 5)

AUTH報文被從客戶端發送給服務端,或從服務端發送給客戶端,作爲擴展認證交換的一部分,比如挑戰/響應認證。如果CONNECT報文不包含相同的認證方法,則客戶端或服務端發送AUTH報文將造成協議錯誤(Protocol Error)。

挑戰/響應認證

(1) 先由客戶端向服務器發出一個驗證請求。
(2) 服務器接到此請求後生成一個隨機數並通過網絡傳輸給客戶端(此爲挑戰)。
(3) 客戶端將收到的隨機數提供給ePass,由ePass使用該隨機數與存儲在ePass中的密鑰進行HMAC-MD5運算並得到一個結果作爲認證證據傳給服務器(此爲響應)。
(4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-MD5運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認爲客戶端是一個合法用戶。

固定報頭

在這裏插入圖片描述

AUTH報文固定報頭第3,2,1,0位是保留位,必須全設置爲0。客戶端或服務端必須把其他值當做無效值並關閉網絡連接。

剩餘長度字段
等於可變報頭的長度,編碼爲變長字節整數。

可變報頭

AUTH報文可變報頭按順序包含以下字段:認證原因碼(Authentication Reason Code),屬性(Properties)。

認證原因碼

在這裏插入圖片描述

如果原因碼爲0x00(成功)並且沒有屬性字段,則可以省略原因碼和屬性長度。這種情況下,AUTH報文剩餘長度爲0。

AUTH屬性

屬性長度

UTH報文可變報頭中的屬性的長度被編碼爲變長字節整數。

認證方法

21 (0x15)Byte,認證方法(Authentication Method)標識符。

跟隨其後的是一個UTF-8編碼字符串,包含認證方法名稱。省略認證方法或者包含多個認證方法都將造成協議錯誤(Protocol Error)。

認證數據

22 (0x16)Byte,認證數據(Authentication Data)標識符。
跟隨其後的是二進制數據,包含認證數據。包含多個認證數據將造成協議錯誤(Protocol Error)。此數據的內容由認證方法定義。

原因字符串

31 (0x1F)Byte,原因字符串(Reason String)標識符。
跟隨其後的是UTF-8編碼字符串,表示斷開原因。此原因字符串是爲診斷而設計的可讀字符串,不應該被接收端所解析。

如果加上原因字符串之後的AUTH報文長度超出了接收端所指定的最大報文長度,則發送端不能發送此屬性。包含多個原因字符串將造成協議錯誤(Protocol Error)。

用戶屬性

38 (0x26)Byte,用戶屬性(User Property)標識符。 跟隨其後的是UTF-8字符串鍵值對。此屬性可用於向客戶端提供包括診斷信息在內的附加信息。如果加上用戶屬性之後的AUTH報文長度超出了接收端指定的最大報文長度,則服務端不能發送此屬性。用戶屬性(User Property)允許出現多次,以表示多個名字/值對,且相同的名字可以多次出現。

AUTH載荷

AUTH報文沒有有效載荷

AUTH行爲

在之後的博文關於“操作行爲”的內容會提到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章