閱讀239 返回首頁    go 阿裏雲 go 技術社區[雲棲]


後端簽名密鑰說明文檔__使用手冊(開放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

簽名計算方法步驟如下:

組織參與加簽的數據

  1. String stringToSign=
  2. HTTPMethod + "n" + //Method全大寫
  3. Content-MD5 + "n" + //Content-MD5 需要判斷是否為空,如果為空則跳過,但是為空也需要添加換行符 "n"
  4. Headers + //Headers 如果為空不需要添加"n",不為空的Headers中包含了"n",詳見下麵組織Headers的描述
  5. Url

計算簽名

  1. Mac hmacSha256 = Mac.getInstance("HmacSHA256");
  2. byte[] keyBytes = secret.getBytes("UTF-8");
  3. hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
  4. 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,計算方式為:

  1. 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轉換成小寫,然後按照如下方式拚接:

  1. String headers =
  2. HeaderKey1.toLowerCase() + ":" + HeaderValue1 + "n"+
  3. HeaderKey2.toLowerCase() + ":" + HeaderValue2 + "n"+
  4. ...
  5. HeaderKeyN.toLowerCase() + ":" + HeaderValueN + "n"

Url

Url指 Path+Query+Body 中Form參數,組織方法:如果有Query或Form參數則加”?”,然後對 Query+Form 參數按照字典對Key進行排序後按照如下方法拚接,如果沒有Query或Form參數,則 Url = Path

  1. String url =
  2. Path +
  3. "?" +
  4. Key1 + "=" + Value1 +
  5. "&" + Key2 + "=" + Value2 +
  6. ...
  7. "&" + 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

  上一篇:go API網關使用限製__使用手冊(開放API)_API 網關-阿裏雲
  下一篇:go OpenID Connect認證__使用手冊(開放API)_API 網關-阿裏雲