全部/業内動态/企業新聞/解決方案/成功案例/幫助文(wén)檔
xfarme 通用(yòng)API 後端簽名說明(míng)文(wén)檔
發布日期:2024-06-05
後端簽名密鑰是由您創建的一對(duì) Key 和(hé) Secret,相當于您給網關頒發了(le)一個賬号密碼。開(kāi)啓後端簽名後 ,API 網關向您後端服務請(qǐng)求時(shí)會(huì)使用(yòng)這(zhè)一對(duì)Key和(hé)Secret對(duì)請(qǐng)求内容進行加簽處理(lǐ),您後端服務可以對(duì)網關發送過來(lái)的請(qǐng)求做對(duì)稱加簽計(jì)算(suàn),對(duì)比網關的簽名和(hé)服務器端計(jì)算(suàn)的簽名是否一緻就可以對(duì)網關做身份驗證。
概述
創建簽名密鑰并将簽名密鑰綁定到(dào) API 即可開(kāi)啓後端簽名(請(qǐng)妥善保管此密鑰,API 網關會(huì)對(duì)密鑰進行加密存儲來(lái)保障密鑰的安全性)。
創建密鑰時(shí)需要選擇 Region,Region 一旦選定不能(néng)更改,而且密鑰隻能(néng)被綁定到(dào)同一個 Region 下(xià)的API上(shàng)。
一個 API 僅能(néng)綁定一個密鑰,密鑰可以被替換和(hé)修改。
所有您定義的參數都會(huì)參與簽名,包括您錄入的業務參數、您定義的常量系統參數和(hé) API 網關系統參數(如 CaClientIp 等)。
後端對(duì) API 網關的簽名字符串校驗後,如果校驗失敗,建議(yì)返回 errorcode = 403;errormessage = “InvalidSignature”。
若您的後端服務爲VPC環境,且通過内網對(duì)接(VPC内網訪問API網關),您無需使用(yòng)後端簽名,通道(dào)自(zì)身是安全的。
讀取 API 網關簽名方法
網關計(jì)算(suàn)的簽名保存在 Request 的 Header 中,Header 名稱:X-Ca-Proxy-Signature。
後端 HTTP 服務加簽方法
簽名計(jì)算(suàn)的詳細 demo(JAVA)請(qǐng)參照鏈接:https://github.com/aliyun/api-gateway-demo-sign-backend-java。
簽名計(jì)算(suàn)方法步驟如下(xià):
1. 組織參與加簽的數據:
String stringToSign=
HTTPMethod + " " +         //Method全大(dà)寫
Content-MD5 + " " +        //Content-MD5 需要判斷是否爲空(kōng),如果爲空(kōng)則跳過,但(dàn)是爲空(kōng)也(yě)需要添加換行符 " "
Headers +                   //Headers 如果爲空(kōng)不需要添加" ",不爲空(kōng)的Headers中包含了(le)" ",詳見下(xià)面組織Headers的描述
Url
2. 計(jì)算(suàn)簽名:
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = secret.getBytes("UTF-8");  //secret 爲綁定到(dào) API 上(shàng)的簽名密鑰
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(Sha256.doFinal(stringToSign.getBytes("UTF-8")),"UTF-8"));
補充說明(míng)
Content-MD5
Content-MD5 是指 Body 的 MD5 值,隻有 HttpMethod 爲 PUT 或者 POST 且 Body 爲非 Form 表單時(shí)才計(jì)算(suàn) MD5,計(jì)算(suàn)方式爲:
String content-MD5 = Base64.encodeBase64(MD5(bodyStream.getbytes("UTF-8")));
Headers
Headers 指所有參與簽名計(jì)算(suàn)的 Header的Key、Value。參與簽名計(jì)算(suàn)的 Header 的 Key 從(cóng) Request Header 中讀取,Key爲:"X-Ca-Proxy-Signature-Headers",多個 Key 用(yòng)英文(wén)逗号分割。
Headers 組織方法:
先對(duì)所有參與簽名計(jì)算(suàn)的 Header 的 Key 按照字典排序,然後将 Header 的 Key 轉換成小(xiǎo)寫後按照如下(xià)方式拼接:
String headers = HeaderKey1.toLowerCase() + ":" + HeaderValue1 +" "+
 HeaderKey2.toLowerCase() + ":" + HeaderValue2 +" "+
 ... +
HeaderKeyN.toLowerCase() + ":" + HeaderValueN + " "
Url
Url指 Path+Query+Body 中 Form 參數,組織方法: 如果有 Query 或 Form 參數則加 ?,然後對(duì) Query+Form 參數按照字典對(duì) Key 進行排序後按照如下(xià)方法拼接,如果沒有 Query 或 Form 參數,則 Url = Path。
String url =
 Path +
 "?" +
 Key1 + "=" + Value1 
+ "&" + Key2 + "=" + Value2 +
 ... 
"&" + KeyN + "=" + ValueN
關鍵字:中農(nóng)物聯,農(nóng)業,數據中心,大(dà)數據,平台
萬嘉智能(吉林省)物聯科技有限公司
版權所有© 2015—2022
Powered By @winnto.com
吉ICP備—20003797号
聯系方式
業務電話(huà):0431-81056111
公司地址:吉林(lín)省長春市寬城(chéng)區(qū)裝備産業園A27
信用(yòng)代碼:91220103MA14WNL2XJ
官方網站(zhàn):www.ccniot.com
企業郵箱:i@ccniot.com
快(kuài)速導航
資訊中心
産品中心
解決方案
客戶案例
企業微信
公衆号