Http請求加簽、驗證操作


加簽、驗簽的作用

常見的http請求交互過程中,請求參數通過url或者request body等形式傳輸。但是由於http請求的開放性,使得請求參數很容易被攔截篡改。因此,需要對請求參數進行加簽,然后在請求接受方對請求參數進行驗簽,確保兩個簽名是一樣的,驗簽通過之后請求處理方就可以進行業務邏輯處理了。

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

加簽、驗簽的處理思路

加簽和驗簽就是在請求發送方將請求參數通過加密算法生成一個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方式發送)

  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對外接口,如何增加簽名機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM