后端簽名密鑰是由您創建的一對 Key 和 Secret,相當于您給網關頒發了一個賬號密碼。開啟后端簽名后 ,API 網關向您后端服務請求時會使用這一對Key和Secret對請求內容進行加簽處理,您后端服務可以對網關發送過來的請求做對稱加簽計算,對比網關的簽名和服務器端計算的簽名是否一致就可以對網關做身份驗證。
概述
創建簽名密鑰并將簽名密鑰綁定到 API 即可開啟后端簽名(請妥善保管此密鑰,API 網關會對密鑰進行加密存儲來保障密鑰的安全性)。
創建密鑰時需要選擇 Region,Region 一旦選定不能更改,而且密鑰只能被綁定到同一個 Region 下的API上。
一個 API 僅能綁定一個密鑰,密鑰可以被替換和修改。
所有您定義的參數都會參與簽名,包括您錄入的業務參數、您定義的常量系統參數和 API 網關系統參數(如 CaClientIp 等)。
后端對 API 網關的簽名字符串校驗后,如果校驗失敗,建議返回 errorcode = 403;errormessage = “InvalidSignature”。
若您的后端服務為VPC環境,且通過內網對接(VPC內網訪問API網關),您無需使用后端簽名,通道自身是安全的。
讀取 API 網關簽名方法
網關計算的簽名保存在 Request 的 Header 中,Header 名稱:X-Ca-Proxy-Signature。
后端 HTTP 服務加簽方法
簽名計算的詳細 demo(JAVA)請參照鏈接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
簽名計算方法步驟如下:
1. 組織參與加簽的數據:
String stringToSign=
HTTPMethod + "
" + //Method全大寫
Content-MD5 + "
" + //Content-MD5 需要判斷是否為空,如果為空則跳過,但是為空也需要添加換行符 "
"
Headers + //Headers 如果為空不需要添加"
",不為空的Headers中包含了"
",詳見下面組織Headers的描述
Url
2. 計算簽名:
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8"); //secret 為綁定到 API 上的簽名密鑰
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
補充說明
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 +"
"+
HeaderKey2.toLowerCase() + ":" + HeaderValue2 +"
"+
... +
HeaderKeyN.toLowerCase() + ":" + HeaderValueN + "
"
Url
Url指 Path+Query+Body 中 Form 參數,組織方法: 如果有 Query 或 Form 參數則加 ?,然后對 Query+Form 參數按照字典對 Key 進行排序后按照如下方法拼接,如果沒有 Query 或 Form 參數,則 Url = Path。
String url =
Path +
"?" +
Key1 + "=" + Value1
+ "&" + Key2 + "=" + Value2 +
...
"&" + KeyN + "=" + ValueN
關鍵字:中農物聯,農業,數據中心,大數據,平臺