自定義鑒權(quán)模式
自定義鑒權(quán)模式是一種不再依賴阿里云的AccessKey、SecretKey認(rèn)證以及RAM授權(quán)校驗(yàn),而是可以由您自定義并上傳身份認(rèn)證與Topic授權(quán)信息的鑒權(quán)方式。這種鑒權(quán)模式比較靈活自由,一般適用于自建上云遷移場景,以便盡可能地與原有權(quán)限校驗(yàn)方式保持一致。
名詞解釋
術(shù)語 | 說明 |
應(yīng)用服務(wù)器 | 您管理本地賬號的服務(wù)器,用來替客戶端申請和管理設(shè)備訪問憑證服務(wù)的應(yīng)用。 |
MQTT服務(wù)器 | 云消息隊(duì)列 MQTT 版權(quán)限認(rèn)證和消息收發(fā)服務(wù)器,用來處理應(yīng)用服務(wù)器發(fā)起的鑒權(quán)相關(guān)的請求以及消息收發(fā)業(yè)務(wù)。 |
使用說明
無論使用何種鑒權(quán)模式,本質(zhì)上可以歸結(jié)為身份認(rèn)證和資源權(quán)限兩個(gè)基本功能。身份認(rèn)證,即客戶端的身份標(biāo)識,由Username/Password傳參以及ClientId來識別,然后進(jìn)行服務(wù)端校驗(yàn)。資源權(quán)限,主要是Topic的發(fā)布訂閱權(quán)限,由您提前把授權(quán)信息上傳到服務(wù)端,然后對客戶端實(shí)際收發(fā)的Topic進(jìn)行收發(fā)權(quán)限校驗(yàn)。
身份認(rèn)證
目前服務(wù)端提供兩種維度的身份標(biāo)識:
根據(jù)Username來標(biāo)識,無需關(guān)注ClientId,多個(gè)客戶端可以共用。
根據(jù)Username + ClientId來標(biāo)識,表示具體到某個(gè)客戶端專用,其他客戶端不會(huì)混用。
Password即密鑰或簽名,一般不建議直接設(shè)置為密鑰,而是使用密鑰對ClientId進(jìn)行簽名得到Password。具體計(jì)算方法如下:
舉例:一個(gè)客戶端的Client ID是GID_Test@@@0001,使用的AccessKey Secret(secretKey)是XXXXX。用XXXXX作為密鑰,使用HMAC-SHA1方法對待簽名字符串GID_Test@@@0001做簽名計(jì)算得到一個(gè)二進(jìn)制數(shù)組,再對該二進(jìn)制數(shù)組做Base64編碼得到最終的Password簽名字符串。
不過,考慮到自定義權(quán)限的靈活性以及簽名算法的多樣式,我們也提供了簡單設(shè)置原始簽名的方式,即服務(wù)端只比較Password和您提前上傳的原始簽名。
資源權(quán)限
資源主要是指Topic,云消息隊(duì)列 MQTT 版支持多級Topic,其中一級Topic需要在控制臺創(chuàng)建。權(quán)限主要是指Topic的發(fā)布和訂閱權(quán)限。在客戶端收發(fā)消息之前,需要對相應(yīng)的Topic授權(quán)(支持MQTT多級Topic或通配符),授權(quán)的對象可以是Username,或者具體的客戶端(ClientId)。
連接黑名單
自定義鑒權(quán)模式提供了連接黑名單功能,您可以設(shè)置禁用某個(gè)客戶端(ClientId)的連接。
使用流程
具體流程如下:
用戶應(yīng)用服務(wù)端調(diào)用相關(guān)OpenAPI接口向MQTT服務(wù)器上傳身份信息(賬號、密碼等)、Topic授權(quán)信息。
用戶應(yīng)用服務(wù)端設(shè)置客戶端相關(guān)傳參,如Username、Password、ClientId。
客戶端向MQTT服務(wù)器發(fā)起請求,通過鑒權(quán)后,使用對應(yīng)的Topic進(jìn)行消息收發(fā)。
使用限制
實(shí)例限制:目前僅專業(yè)版、鉑金版實(shí)例支持自定義鑒權(quán)模式。
過期設(shè)置:云消息隊(duì)列 MQTT 版對于身份認(rèn)證、資源授權(quán)以及連接黑名單等數(shù)據(jù)暫不提供過期設(shè)置功能,您可以及時(shí)刪除相關(guān)接口進(jìn)行管理。
容量限制:無論是身份認(rèn)證,還是資源權(quán)限都占用了實(shí)例的元數(shù)據(jù)存儲,所以您需要自行管理鑒權(quán)數(shù)據(jù),及時(shí)刪除不用的權(quán)限數(shù)據(jù)。目前身份認(rèn)證、資源授權(quán)連接數(shù)均不能超過實(shí)例的連接數(shù)規(guī)格限制,且連接黑名單也是一種權(quán)限數(shù)據(jù),其數(shù)量包括在資源權(quán)限里面,二者之和不能超過實(shí)例的連接數(shù)規(guī)格限制。連接數(shù)規(guī)格限制詳情,請參見使用限制。
Group降級
云消息隊(duì)列 MQTT 版定義了Group,用于指定一組邏輯功能完全一致的節(jié)點(diǎn)共用的組名,代表一類相同功能的設(shè)備,ClientId由兩部分組成,形式為<GroupID>@@@<DeviceID>
。然而由于該格式的限制,導(dǎo)致已有自定義設(shè)備ID很難遷移過來。為此,我們也支持降級Group的功能,即ClientId可以任意填寫,在Group降級時(shí),一些控制臺功能比如設(shè)備查詢、設(shè)備軌跡查詢暫且也被降級不能使用。
相關(guān)API
自定義鑒權(quán)模式提供了身份認(rèn)證和資源授權(quán)相關(guān)的管控API,您可以根據(jù)身份認(rèn)證的相關(guān)API來管理身份信息,可以根據(jù)資源授權(quán)相關(guān)的API來管理Topic的收發(fā)權(quán)限。
API | 描述 |
調(diào)用AddCustomAuthIdentity添加賬號身份認(rèn)證信息。 | |
調(diào)用UpdateCustomAuthIdentity更新自定義身份認(rèn)證信息。 | |
調(diào)用QueryCustomAuthIdentity查詢自定義身份認(rèn)證信息。 | |
調(diào)用DeleteCustomAuthIdentity刪除自定義身份認(rèn)證信息。 | |
調(diào)用AddCustomAuthPermission添加Topic資源授權(quán)信息。 | |
調(diào)用UpdateCustomAuthPermission更新Topic資源授權(quán)信息。 | |
調(diào)用QueryCustomAuthPermission查詢Topic授權(quán)信息。 | |
調(diào)用DeleteCustomAuthPermission刪除Topic授權(quán)信息。 | |
調(diào)用AddCustomAuthConnectBlack添加連接黑名單,禁用某個(gè)設(shè)備連接。 | |
調(diào)用DeleteCustomAuthConnectBlack刪除連接黑名單。 | |
調(diào)用QueryCustomAuthConnectBlack查詢連接黑名單。 |