溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何做開放API的簽名認(rèn)證

發(fā)布時(shí)間:2021-12-30 10:53:06 來源:億速云 閱讀:138 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下如何做開放API的簽名認(rèn)證,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

項(xiàng)目中有一套restful接口需要暴露在公網(wǎng)環(huán)境中,需要確保調(diào)用安全。包括以下三個(gè)方面

1、請(qǐng)求來源(身份)要合法

2、請(qǐng)求參數(shù)不能被篡改

3、請(qǐng)求要唯一(不可復(fù)制)

為了保證數(shù)據(jù)在通信時(shí)的安全性,可以采用參數(shù)簽名的方式來進(jìn)行相關(guān)驗(yàn)證。

一、不驗(yàn)證的方式

偽代碼如下圖

如何做開放API的簽名認(rèn)證

這種方式實(shí)現(xiàn)簡單,但是問題非常明顯,誰都可以得到想要的數(shù)據(jù)。

二、MD5參數(shù)簽名

參看《MD5防止數(shù)據(jù)被篡改的做法》

我們對(duì)api查詢產(chǎn)品接口進(jìn)行優(yōu)化

1.給app分配對(duì)應(yīng)的key、secret

2.sign簽名,調(diào)用API 時(shí)需要對(duì)請(qǐng)求參數(shù)進(jìn)行簽名驗(yàn)證,簽名方式如下

(1)按照請(qǐng)求參數(shù)名稱將所有請(qǐng)求參數(shù)按照字母先后順序排序得到,keyvaluekeyvalue...keyvalue  字符串如:將arong=1,mrong=2,crong=3 排序?yàn)椋琣rong=1, crong=3,mrong=2  然后將參數(shù)名和參數(shù)值進(jìn)行拼接得到參數(shù)字符串,arong1crong3mrong2

(2)將secret加在參數(shù)字符串的頭部后進(jìn)行MD5加密 ,加密后的字符串需大寫。即得到簽名sign

新api接口代碼如下

如何做開放API的簽名認(rèn)證

這種方法請(qǐng)求多了key和sign參數(shù),請(qǐng)求的時(shí)候就需要合法的key和正確簽名sign才可以獲取群組數(shù)據(jù)。這樣就解決了身份驗(yàn)證和防止參數(shù)篡改問題。如果請(qǐng)求參數(shù)被人拿走,他永遠(yuǎn)也拿不到secret,因?yàn)閟ecret是不傳遞的(客戶端中病毒除外)。沒有secrret無法偽造合法的請(qǐng)求。

但是這樣還不夠,如果獲取你完整的鏈接,一直使用你的key和sign和一樣的參數(shù)同樣可以得到數(shù)據(jù)

三、請(qǐng)求唯一性保證

為了防止別人重復(fù)使用請(qǐng)求參數(shù)問題,我們需要保證請(qǐng)求的唯一性,就是對(duì)應(yīng)請(qǐng)求只能使用一次,這樣就算別人拿走了請(qǐng)求的完整鏈接也是無效的。

唯一性的實(shí)現(xiàn):在如上的請(qǐng)求參數(shù)中,我們加入時(shí)間戳timestamp(yyyyMMddHHmmss),同樣,時(shí)間戳作為請(qǐng)求參數(shù)之一,也加入sign算法中進(jìn)行加密

如何做開放API的簽名認(rèn)證

通過timestamp時(shí)間戳用來驗(yàn)證請(qǐng)求是否過期。這樣就算被人拿走完整的請(qǐng)求鏈接也是無效的。除此之外,還可以增加瀏覽器指紋(后續(xù)單獨(dú)寫文章說明)等技術(shù),對(duì)請(qǐng)求唯一性進(jìn)行驗(yàn)證。

sign簽名安全性分析

通過上面的例子,可以看出,安全的關(guān)鍵在于參與簽名的secret,整個(gè)過程中secret是不參與通信的,所以只要保證secret不泄露,請(qǐng)求就不會(huì)被偽造。

上述的sign簽名的方式能夠在一定程度上防止信息被篡改和偽造,保障通信的安全,這里使用的是MD5進(jìn)行加密,在實(shí)際使用中可以根據(jù)需求采用其他簽名算法,比如:RSA,SHA等。

以上是“如何做開放API的簽名認(rèn)證”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

api
AI