1. 背景
為了避免可能存在的盜刷問題對您的計費造成影響,我們設計了鑒權機制對此進行防範,您可以按此文檔指引進行接入。
2. 鑒權方案
由於老使用者已經發布了產品,採用的是非鑒權功能方式接入,這部分產品的使用者需要繼續訪問非鑒權介面。
所以我們開放一個新的鑒權介面,產品新版本可以逐漸遷移至新介面,當舊app使用者減少到一定量後,可以開啟加簽訪問開關,以避免對計費系統的影響,如下圖所示。

2.1 存量使用者移轉方案
開啟加簽訪問開關,會導致老版本的存量正在使用產品的使用者,無法訪問HttpDNS服務。
引導存量使用者更新版本,逐漸遷移至鑒權介面。
當非鑒權介面存量產品使用者下降,直至可以接受開啟加簽訪問開關帶來的損失的時候,可以手動開啟加簽訪問開關。
2.2 新使用者使用方式情節
為避免鑒權帶來的額外接入成本,加簽訪問開關預設是關閉的。
如果僅需要鑒權介面功能,請手動開啟加簽訪問開關。
2.3 加簽訪問介面開關的管理
關閉時,可能會引入安全隱患。
只有開啟加簽訪問開關時,才能避免被攻擊導致的費用。
3. 簽名產生和鑒權機制
使用HTTP API時,務必閱讀最佳實務建議,否則存在業務故障風險。
3.1 簽名產生演算法及樣本
鑒權介面
http://47.74.XXX.XXX/{account_id}/sign_d
http://47.74.XXX.XXX/{account_id}/sign_resolve
其中的 {account_id} 需要替換為使用者的HTTPDNS Account ID,在HTTPDNS控制台上可以獲得這個ID。
鑒權介面可以添加IP參數,是否添加該參數及參數內容不影響簽名的計算。
服務IP列表擷取可以參考:如何擷取解析服務地址
簽名演算法
sign = md5sum( host-secret-timestamp )
鑒權欄位說明
欄位 | 描述 |
host | 需要被解析的host,與URL中的host參數取同樣的值。 |
secret | 由伺服器負責產生,控制台 > 開發配置中擷取。
|
timestamp | 簽名失效時間,1970年1月1日以來的秒數(整型正數,固定長度10)。 說明 簽名最長有效時間不超過24小時。 |
簽名樣本
樣本1(普通解析API介面):
原請求:http://47.74.XXX.XXX/{account_id}/d?host=www.aliyun.com
假設密鑰為:IAmASecret,希望在北京時間2018-08-15 15:00:00失效(時間戳記1534316400)
sign = md5sum(“www.aliyun.com-IAmASecret-1534316400”) = 60c71e98b6d7fcbb366243e224eab457
鑒權請求:http://47.74.XXX.XXX/{account_id}/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457
樣本2(批量解析API介面):
原請求:
http://47.74.XXX.XXX/{account_id}/resolve?host=www.aliyun.com,www.taobao.com
假設密鑰為:IAmASecret,希望在北京時間2018-08-15 15:00:00失效(時間戳記1534316400)
sign = md5sum(“www.aliyun.com,www.taobao.com-IAmASecret-1534316400”) = 12a3f6b1b14a46ca813ca6439beb59a4
鑒權請求:http://47.74.XXX.XXX/{account_id}/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4
此方案優缺點
缺點
用戶端時間不同。
密鑰放在用戶端丟失有風險。
優點
無需去伺服器拉取。
3.2 鑒權響應
鑒權成功時,HTTP響應的狀態代碼為200,響應結果同原單個網域名稱解析 中的 API響應說明。
鑒權失敗時,HTTP響應的狀態代碼為403或400,響應結果同時也返回具體的錯誤碼,響應結果以JSON格式表示。
{ "code": "InvalidSignature" }
3.3 狀態代碼說明
HTTP狀態代碼 | 錯誤碼 | 描述 |
403 | SignatureExpired | 時間戳記已到期 |
403 | InvalidSignature | 簽名不正確 |
400 | InvalidDuration | 簽名有效期間過長(最長86400秒) |
400 | InvalidSignature | 簽名格式不正確 |
400 | InvalidTimestamp | 時間戳記格式不正確 |
400 | AccountNotExists | 賬戶不存在或被禁用 |
