古詩詞大全網 - 藝術簽名 - 如何保證API接口的安全性?

如何保證API接口的安全性?

在實際的業務開發過程中,我們經常會遇到與第三方互聯網公司進行技術對接的需求,比如支付寶支付對接、微信支付對接、高德地圖查詢對接等業務。如果妳是創業型互聯網,可能大部分都是對接其他公司的api接口。

當妳的公司規模壯大了,這個時候可能會有公司開始找妳做技術對接,妳會提供api接口。這時候應該如何設計和保證API接口的安全性呢?

最常用的方案有兩種主要類型:

其中,令牌方案是web上使用最廣泛的接口認證方案。記得之前寫過壹篇文章《教妳如何使用JWT實現單點登錄》,裏面有詳細介紹。感興趣的朋友可以看看。不懂也沒關系。這裏簡單介紹壹下令牌方案。

從上圖中,我們可以清楚地看到,令牌方案的實現主要包括以下步驟:

在實際使用過程中,當用戶登錄成功後,生成的令牌在redis存儲時是有時間限制的,壹般設置為2小時,2小時後會自動失效。這時候就需要重新登錄,重新獲取壹個有效的令牌。

Token方案是目前業務類型中應用最廣泛的方案,實用性很強,可以有效防止黑客抓取包和抓取數據。

但是令牌方案也有壹些缺點!最明顯的就是當妳和第三方公司接口的時候,當妳的接口請求非常大的時候,這個時候token突然失效,會有大量的接口請求失敗。

對此我深有體會。記得很早的時候,我在和壹家中大型互聯網公司調試的時候,他們給我提供的接口對接方案是token方案。當時我們公司流量高峰期,我讓他們的接口報了大量錯誤。原因是令牌失敗了。當令牌失敗時,我們會調用它們來刷新令牌接口。刷新完成後,在令牌失效到令牌刷新的時間間隔內,會有大量失敗的請求,所以我不建議妳在實際的API對接過程中采用令牌方案。

接口簽名,顧名思義就是通過壹些簽名規則對參數進行簽名,然後將簽名信息放入請求頭中。服務器收到客戶端的請求後,只需要按照設定的規則產生相應的簽名字符串,並與客戶端的簽名信息進行比較。如果壹致,則進入業務處理流程。如果沒有通過,會提示簽名驗證失敗。

在接口簽名方案中,主要有四個核心參數:

其中,簽名生成規則分為兩步:

參數2的加密結果就是我們想要的最終簽名字符串。

接口簽名方案,特別是在大量接口請求的情況下,仍然非常穩定。

換句話說,您可以將接口簽名視為令牌方案的補充。

但如果妳想把接口簽名方案擴展到前端對接,答案是:不適合。

因為簽名計算非常復雜,其次很容易泄露appsecret!

說了這麽多,還是跟著節目壹起練吧!

如前所述,令牌方案的關鍵點在於,當用戶登錄成功後,我們只需要生成相應的令牌,然後返回給前端,下次請求業務接口時需要帶上令牌。

具體做法也可以分為兩種:

接下來,我們介紹第二個實現。

首先,編寫壹個jwt工具。

然後,當我們登錄時,我們生成壹個令牌並將其返回給客戶端。

最後,編寫壹個統壹的攔截器來驗證客戶端傳入的令牌是否有效。

在生成令牌的時候,我們可以在令牌中存儲壹些基本的用戶信息,比如用戶ID、用戶名等,這樣在令牌被認證之後,我們只需要解析裏面的信息就可以得到對應的用戶ID,這樣就可以省去在數據庫中查詢壹些基本信息的操作。

同時在使用過程中,盡量不要存儲敏感信息,因為容易被黑客分析!

同理,從服務器驗證的角度,我們可以先寫壹個簽名攔截器來驗證客戶端傳入的參數是否合法,只要有壹項不合法,我們就會提示錯誤。

具體編碼做法如下:

簽名工具類簽名:

簽名計算可以改成hamc方法,思路基本相同。

上述令牌和接口簽名方案可以保護所提供的接口,以防止其他人篡改請求或模擬請求。

但是對數據本身缺乏安全保護,即請求的參數和返回的數據可能被他人截獲,而這些數據是明文的,所以只要被截獲,就可以獲取相應的業務數據。

在這種情況下,建議您加密請求參數和返回參數,如RSA、AES和其他加密工具。

同時在生產環境中,使用https進行傳輸可以起到很好的安全防護作用!