239
阿裏雲
後端簽名密鑰說明文檔__使用手冊(開放API)_API 網關-阿裏雲
- API網關提供後端HTTP服務簽名驗證功能,創建簽名密鑰並將簽名密鑰綁定到API即可開啟後端簽名(請妥善保管此密鑰,API網關會對密鑰進行加密存儲來保障密鑰的安全性)。
- 開啟後端簽名後API網關到後端HTTP服務的請求將會添加簽名信息,後端HTTP服務讀取API網關的簽名字符串,然後對收到的請求進行本地簽名計算,比對網關與本地簽名結果是否一致。
- 所有您定義的參數都會參與簽名,包括您錄入的業務參數、您定義的常量係統參數和API網關係統參數(如 CaClientIp 等)。
- 後端對API網關的簽名字符串校驗後,如果校驗失敗,建議返回 errorcode = 403;errormessage = “InvalidSignature”。
讀取API網關簽名方法
- 網關計算的簽名保存在Request的Header中,Header名稱:X-Ca-Proxy-Signature
後端HTTP服務加簽方法
簽名計算的詳細demo(JAVA)請參照鏈接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
簽名計算方法步驟如下:
組織參與加簽的數據
String stringToSign=
HTTPMethod + "n" + //Method全大寫
Content-MD5 + "n" + //Content-MD5 需要判斷是否為空,如果為空則跳過,但是為空也需要添加換行符 "n"
Headers + //Headers 如果為空不需要添加"n",不為空的Headers中包含了"n",詳見下麵組織Headers的描述
Url
計算簽名
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8");
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
secret為綁定到API上的簽名密鑰
說明
Content-MD5
Content-MD5 是指Body的MD5值,隻有 HttpMethod 為PUT或者POST且Body為非Form表單時才計算MD5,計算方式為:
String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes("UTF-8")));
Headers
Headers指所有參與簽名計算的Header的Key、Value。參與簽名計算的Header的Key從 Request Header 中讀取,Key為:”X-Ca-Proxy-Signature-Headers”,多個Key用英文逗號分割。
Headers組織方法:
先對所有參與簽名計算的Header的Key按照字典排序,並將Header的Key轉換成小寫,然後按照如下方式拚接:
String headers =
HeaderKey1.toLowerCase() + ":" + HeaderValue1 + "n"+
HeaderKey2.toLowerCase() + ":" + HeaderValue2 + "n"+
...
HeaderKeyN.toLowerCase() + ":" + HeaderValueN + "n"
Url
Url指 Path+Query+Body 中Form參數,組織方法:如果有Query或Form參數則加”?”,然後對 Query+Form 參數按照字典對Key進行排序後按照如下方法拚接,如果沒有Query或Form參數,則 Url = Path
String url =
Path +
"?" +
Key1 + "=" + Value1 +
"&" + Key2 + "=" + Value2 +
...
"&" + KeyN + "=" + ValueN
注意這裏Query或Form參數的Value可能有多個,多個的時候隻取第一個Value參與簽名計算
調試模式
為了方便後端簽名接入與調試,可以開啟Debug模式進行調試,具體方法如下:
1.請求API網關的Header中添加 X-Ca-Request-Mode = debug
2.後端服務在Header中讀取 X-Ca-Proxy-Signature-String-To-Sign 即可,因為 HTTP Header 中值不允許有換行符,因此換行符被替換成了 “|”。
注意:X-Ca-Proxy-Signature-String-To-Sign不參與後端簽名計算
時間戳校驗
如果後端需要對請求進行時間戳校驗,可以在API定義中選擇係統參數 “CaRequestHandleTime” ,值為網關收到請求的格林威治時間。
最後更新:2016-11-24 11:23:48
上一篇:
API網關使用限製__使用手冊(開放API)_API 網關-阿裏雲
下一篇:
OpenID Connect認證__使用手冊(開放API)_API 網關-阿裏雲
IT培訓細分化:雲計算和大數據缺口催生“阿裏雲大學”
欠費流程__購買指導_DDoS 高防IP-阿裏雲
刪除記錄__解析記錄操作_產品使用手冊_雲解析-阿裏雲
快速開始-NodeJS__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲
GIS地理數據分析__應用場景_雲數據庫 HybridDB-阿裏雲
網站漏洞體檢__安全防護_產品使用手冊_雲解析-阿裏雲
如何開通ECS 8000 端口__創建ECS Pipeline_產品使用問題_數據集成-阿裏雲
產品術語__產品簡介_數據集成-阿裏雲
主機管理控製台操作手冊__管理控製台_使用指南_雲虛機主機-阿裏雲
RouteEntrySetType__數據類型_API 參考_雲服務器 ECS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲