? ? ? ?平臺的理念是一個組織內部只建一套系統。但是現實情況是,組織內部已經建立了很多系統,是不能一次性替代的,只能先搭起平臺,然后逐步開始替換。這樣就不可避免的存在其他系統和平臺進行交互的問題。
? ? ? 平臺為此設計了開放API接口。其中的核心問題是鑒權。鑒權有多種模式,平臺選擇了簽名鑒權模式,省去了先握手獲取Token,然后用Token訪問的復雜過程。下面詳細說明接口簽名鑒權設計原理。
? ? ? 接入系統首先需要從平臺獲取應用ID(AppID)和應用密鑰(AppSecret)
? ? ? 接入系統調用平臺API時,需要填充如下頭信息:
QLM-Open-App-Id:應用ID QLM-Open-Auth-Mode:固定值Signature QLM-Open-CA-Signature:簽名值,這個是鑒權的核心 QLM-Open-CA-Timestamp:時間戳,單位毫秒 Accept:響應類型,固定為*/* Content-Type:application/json; charset=UTF-8 Content-MD5:請求Body體數據的 Content-MD5 值
簽名計算是鑒權的核心,它可以確保是由AppID對應的客戶端發起的,且發起內容在傳輸過程中沒有被篡改。簽名過程如下:
1、準備待簽名字符串。
第一行:HTTP的請求方法,需大寫。距離:GET、POST。
第二行:固定為*/*
第三行:請求頭中的QLM-Open-CA-Timestamp值
第四行:請求頭中的 Content-Type 值
第五行:請求頭中的QLM-Open-CA-Timestamp
第六行:請求地址,注意不含服務器及其端口
注意行以/n結束,不要加/r,另外大小寫是敏感的。
2、計算簽名。
使用 AppSecret(應用密鑰) 對待簽名字符串進行 HmacSHA256 加密處理
服務器端校驗原理,從請求頭里獲取應用ID,查詢后臺登記信息,找到對應的AppSecret,對信息進行同樣的處理,最后驗證簽名是否一樣。
基于同樣原理,可以對請求body做校驗,確保傳輸過程中,請求沒有被篡改。基本方式是客戶端對body進行處理,然后將結果存入Content-MD5頭中,服務器端收到請求后,做同樣處理,然后驗證是否一致。
小技巧:平臺提供的接口可能會大改,為了保持兼容,接口地址第一段是版本,目前只提供了/V1/*,將來會提供/V2/*。