Http請求加簽、驗證操做

加簽、驗籤的做用

常見的http請求交互過程當中,請求參數經過url或者request body等形式傳輸。可是因爲http請求的開放性,使得請求參數很容易被攔截篡改。所以,須要對請求參數進行加簽,而後在請求接受方對請求參數進行驗籤,確保兩個簽名是同樣的,驗籤經過以後請求處理方就能夠進行業務邏輯處理了。算法

可是,加簽和驗籤只能解決請求傳輸過程當中參數篡改的問題,並不能解決敏感參數傳輸的安全性問題。api

加簽、驗籤的處理思路

加簽和驗籤就是在請求發送方將請求參數經過加密算法生成一個sign值,放到請求參數裏;請求接收方收到請求後,使用一樣的方式對請求參數也進行加密獲得一個sign值,只要兩個sign值相同,就說明參數沒有被篡改。安全

簽名參數sign生成的方法

  1. 將因此頭參數(注意時全部參數),出去sign自己,以及值是空的參數,按參數鍵字母升序排序。
  2. 而後把排序後的參數按參數1值1參數2值2......參數n值n(這裏的參數和值必須是傳輸參數的原始值,不能是通過處理的,如不能將"轉成"後再拼接)的方式拼接成一個字符串。
  3. 把分配給接入方的驗證密鑰key拼接在第2步獲得的字符串前面。
  4. 在上一步獲得的字符串前面加上密鑰key(這裏的密鑰key是接口提供方分配給接口接入方的),而後計算md5值,獲得32位字符串,而後轉成大寫,獲得的字符串做爲sign的值放到請求參數裏。

舉例

如今假設須要傳輸的數據是:http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn(實際狀況最好是經過post方式發送)post

  1. 拼接字符串,首先去除值是空的參數p3,剩下p2=v2&p1=v1&method=cancel&pn=vn,而後按參數名字符升序排序獲得字符串:method=cancel&p1=v1&p2=v2&pn=vn。
  2. 而後作參數名和值的拼接,最後獲得methodcancelp1v1p2v2pnvn。
  3. 在上面拼接獲得的字符串前面加上驗證密鑰key,假設是abc,獲得新的字符串abcmethodcancelp1v1p2v2pnvn。
  4. 將上面獲得的字符串進行md5計算,假設獲得的是abcdef,而後轉爲大寫,獲得ABCDEF這個值即爲sign簽名值。最終產生的url應該以下:http://xxx.com/api/guest/rechargeNotify?p2=v2&p1=v1&method=cancel&p3=&pn=vn&sign=ABCDEF
  5. 注意:計算md5以前請確保請求發送方和接收方使用的字符串編碼一致,好比統一使用utf-8編碼,若是編碼方式不一致則計算出來的簽名會校驗失敗。

驗簽過程

其實就是將請求url按照上述的規則進行一樣的操做,計算獲得參數的簽名值,而後和參數中傳遞的sign值進行對比,若是一致則校驗經過,不然校驗不經過。阿里雲

阿里雲加簽方式

簽名機制編碼

參考優秀博文

  1. HTTP對外接口,如何增長簽名機制
相關文章
相關標籤/搜索