一、接入步驟
提示
- 參考的http-server模塊下test文件夾下的TestBasicScheme.java和TestDigestScheme.java接入測(cè)試代碼
設(shè)備認(rèn)證
- 摘要認(rèn)證(Digest)
- 基礎(chǔ)認(rèn)證(Basic)
設(shè)備交互
- 發(fā)布物模型、設(shè)備信息相關(guān)Mqtt主題
二、設(shè)備認(rèn)證

1. 摘要認(rèn)證
- 接收到客戶(hù)端未認(rèn)證請(qǐng)求后,服務(wù)器端回復(fù) 狀態(tài)401,Header頭:WWW-Authenticate,值為:Digest realm="http-auth@fastbee.com", nonce="xxxxx", opaque="", stale="FALSE", qop="auth", algorithm="MD5"
Digest: 說(shuō)明是摘要認(rèn)證
qop: =auth時(shí)說(shuō)明需要認(rèn)證,=auth-int時(shí)需要有完整性保護(hù)的認(rèn)證,其他值忽略。(可選)
realm: 當(dāng)前響應(yīng)所在的域,根據(jù)域就知道該使用哪個(gè)用戶(hù)名密碼了,一般包含執(zhí)行認(rèn)證功能的主機(jī)名。
nonce: 服務(wù)器生成的隨機(jī)字符串,用于加密使用,一般是Base64或十六進(jìn)制數(shù)據(jù),Get請(qǐng)求conce包含過(guò)期時(shí)間,Put或Post要求使用一次性nonce。
stale: 為true時(shí)說(shuō)明nonce失效了,需要重新獲取,為false是說(shuō)明nonce仍然有效。
a1gorithm: 說(shuō)明算法,沒(méi)有該值時(shí)默認(rèn)使用MD5算法
- 客戶(hù)端 解析 ww-Authenticate 獲取nonce和加密算法等信息,生成response
1. 以格式 user:realm:password 進(jìn)行MD5加密得到值 a1,如 fastbee:http-auth@fastbee.com:fastbee
2. 以格式 method:uri 進(jìn)行MD5加密得到值 a2,如 post:/
3. 以格式 a1:nonce:nc:cnonce:qop:a2 進(jìn)行MD5加密得到 response,如:a1:326435383a37323966343563663a3c2f55408da812d8509c09bb0574faff:00000001:0a4f113b:auth:a2
- 客戶(hù)端 給http請(qǐng)求添加Header頭:Authorization,值為:
Digest username="fastbee", realm="http-auth@fastbee.com",
nonce="353761313a62373364373163373a94eac188bbb9a6119d58f125dfad1c7a", uri="/",algorithm="MD5",
qop=auth,nc=1,cnonce="177783ecbdc88e14",response="c3a1lcf18elebc5f3b237dd4664169262"
- 服務(wù)器端收到請(qǐng)求,進(jìn)行認(rèn)證,認(rèn)證成功后,服務(wù)器會(huì)存儲(chǔ)session信息,下次請(qǐng)求帶認(rèn)證頭即可確認(rèn)設(shè)備歸屬,并獲取設(shè)備存儲(chǔ)在會(huì)話(huà)中的信息
2. 基礎(chǔ)認(rèn)證
- 接收到客戶(hù)端未認(rèn)證請(qǐng)求后,服務(wù)器端回復(fù) 狀態(tài)401,Header頭:WWW-Authenticate,值為:Basic realm="http-auth@fastbee.com"
- 客戶(hù)端將 user:password 進(jìn)行base64編碼,結(jié)果:dXNlcipwYXNzd29yZA==
- 客戶(hù)端給http請(qǐng)求添加Header頭:Authorization,值為:Basic ywRtaW46YWRtal4=
- 服務(wù)器端收到請(qǐng)求,進(jìn)行認(rèn)證,認(rèn)證成功后,服務(wù)器會(huì)存儲(chǔ)session信息,下次請(qǐng)求帶認(rèn)證頭即可確認(rèn)設(shè)備歸屬,并獲取設(shè)備存儲(chǔ)在會(huì)話(huà)中的信息
三、設(shè)備交互
productId
代表產(chǎn)品ID, SerialNumber
代表設(shè)備編號(hào)。通過(guò)web端獲取產(chǎn)品ID和設(shè)備編號(hào),如果使用自動(dòng)添加設(shè)備,設(shè)備編號(hào)可以使用唯一編碼或者使用設(shè)備MAC地址。 http認(rèn)證成功后,客戶(hù)端需發(fā)送/info/post請(qǐng)求,攜帶產(chǎn)品ID和設(shè)備編號(hào)信息,服務(wù)器端會(huì)存儲(chǔ)到session中。
2. 發(fā)布主題
uri | 描述 |
---|---|
/info/post | 發(fā)布設(shè)備信息 |
/property/post | 發(fā)布數(shù)據(jù) (實(shí)時(shí)顯示,屬性/功能和監(jiān)測(cè)數(shù)據(jù),可定時(shí)上報(bào)監(jiān)測(cè)數(shù)據(jù)) |
/event/post | 發(fā)布事件 |
/monitor/post | 發(fā)布實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)(僅用于實(shí)時(shí)監(jiān)測(cè)圖表顯示,不會(huì)存儲(chǔ)) |
3. 數(shù)據(jù)格式
設(shè)備和系統(tǒng)交互使用JSON格式
- 發(fā)布設(shè)備信息,對(duì)應(yīng)主題:
/info/post
# 描述:1.設(shè)備上電后發(fā)布設(shè)備信息; 2.設(shè)備接收到設(shè)備信息指令后發(fā)布設(shè)備信息 # productId 產(chǎn)品ID # serialNumber 設(shè)備編號(hào) # rssi 設(shè)備信號(hào)(信號(hào)極好[-55— 0],信號(hào)好[-70— -55],信號(hào)一般[-85— -70],信號(hào)差[-100— -85]) # status 設(shè)備狀態(tài),固定為3,表示在線(xiàn) # firmwareVersion 固件版本 # userId 用戶(hù)的ID,可設(shè)置為用戶(hù)ID為1(管理員),配網(wǎng)時(shí)會(huì)分配設(shè)備給具體的用戶(hù)。 # longitude 可選,經(jīng)度,使用設(shè)備定位時(shí)需要上傳 # latitude 可選,緯度,使用設(shè)備定位時(shí)需要上傳 # summary 可選,摘要,設(shè)備的配置信息等,json格式,對(duì)象可自定義 { "productId": 145, "serialNumber": "D1M267SH21TM", "rssi": -43, "firmwareVersion": 1.2, "status": 3, "userId": 2, "longitude": 0, "latitude": 0, "summary": { "name": "FastBee", "chip": "ESP8266", "author": "kerwincui", "deliveryTime": "2023-06-06", "activeTime": "2022-10-01" } }
- 發(fā)布數(shù)據(jù)和事件,對(duì)應(yīng)主題:
/property/post
、/event/post
# 描述:屬性、功能、事件都屬于物模型,Json定義是一樣的。`value` 的值如果是布爾類(lèi)型,值為"0"或者"1",代表打開(kāi)/關(guān)閉;枚舉類(lèi)型對(duì)應(yīng)枚舉項(xiàng)的鍵值(例如 "1",代表中速檔位);數(shù)組類(lèi)型是以英文逗號(hào)分隔的字符串。 # id 標(biāo)識(shí)符,產(chǎn)品詳情中查看物模型,對(duì)應(yīng)物模型的標(biāo)識(shí)符 # value 值,對(duì)應(yīng)物模型中定義,以字符串類(lèi)型傳遞 # remark 可以直接使用訂閱到的備注信息,設(shè)備日志信息中查看到該備注 [{ "id": "gear", "value": "1", "remark": "檔位設(shè)置成功" }, { "id": "switch", "value": "0", "remark": "開(kāi)關(guān)已關(guān)閉" }]
- 發(fā)布實(shí)時(shí)監(jiān)測(cè),對(duì)應(yīng)主題:
/monitor/post
# 描述:根據(jù)訂閱到的實(shí)時(shí)監(jiān)測(cè)消息,發(fā)布指定數(shù)量和間隔的監(jiān)測(cè)數(shù)據(jù) # id 標(biāo)識(shí)符,實(shí)時(shí)監(jiān)測(cè)是物模型中的屬性,產(chǎn)品詳情中查看標(biāo)識(shí)符,對(duì)應(yīng)id值 # value 設(shè)備采集的值,只能是整數(shù)或者小數(shù),以字符串類(lèi)型傳遞 # remark 可為空或者使用設(shè)備當(dāng)前時(shí)間 [{ "id": "temperature", "value": "27.43", "remark": "" }, { "id": "humidity", "value": "32.18", "remark": "" }]