您好,登錄后才能下訂單哦!
小編給大家分享一下如何做開放API的簽名認證,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
項目中有一套restful接口需要暴露在公網環境中,需要確保調用安全。包括以下三個方面
1、請求來源(身份)要合法
2、請求參數不能被篡改
3、請求要唯一(不可復制)
為了保證數據在通信時的安全性,可以采用參數簽名的方式來進行相關驗證。
一、不驗證的方式
偽代碼如下圖
這種方式實現簡單,但是問題非常明顯,誰都可以得到想要的數據。
二、MD5參數簽名
參看《MD5防止數據被篡改的做法》
我們對api查詢產品接口進行優化
1.給app分配對應的key、secret
2.sign簽名,調用API 時需要對請求參數進行簽名驗證,簽名方式如下
(1)按照請求參數名稱將所有請求參數按照字母先后順序排序得到,keyvaluekeyvalue...keyvalue 字符串如:將arong=1,mrong=2,crong=3 排序為,arong=1, crong=3,mrong=2 然后將參數名和參數值進行拼接得到參數字符串,arong1crong3mrong2
(2)將secret加在參數字符串的頭部后進行MD5加密 ,加密后的字符串需大寫。即得到簽名sign
新api接口代碼如下
這種方法請求多了key和sign參數,請求的時候就需要合法的key和正確簽名sign才可以獲取群組數據。這樣就解決了身份驗證和防止參數篡改問題。如果請求參數被人拿走,他永遠也拿不到secret,因為secret是不傳遞的(客戶端中病毒除外)。沒有secrret無法偽造合法的請求。
但是這樣還不夠,如果獲取你完整的鏈接,一直使用你的key和sign和一樣的參數同樣可以得到數據
三、請求唯一性保證
為了防止別人重復使用請求參數問題,我們需要保證請求的唯一性,就是對應請求只能使用一次,這樣就算別人拿走了請求的完整鏈接也是無效的。
唯一性的實現:在如上的請求參數中,我們加入時間戳timestamp(yyyyMMddHHmmss),同樣,時間戳作為請求參數之一,也加入sign算法中進行加密
通過timestamp時間戳用來驗證請求是否過期。這樣就算被人拿走完整的請求鏈接也是無效的。除此之外,還可以增加瀏覽器指紋(后續單獨寫文章說明)等技術,對請求唯一性進行驗證。
sign簽名安全性分析
通過上面的例子,可以看出,安全的關鍵在于參與簽名的secret,整個過程中secret是不參與通信的,所以只要保證secret不泄露,請求就不會被偽造。
上述的sign簽名的方式能夠在一定程度上防止信息被篡改和偽造,保障通信的安全,這里使用的是MD5進行加密,在實際使用中可以根據需求采用其他簽名算法,比如:RSA,SHA等。
以上是“如何做開放API的簽名認證”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。