WebApi的安全性解決方案
一、前言
WebApi
的小白想要了解一些關於WebApi
安全性相關的問題,本篇文章是整理一些關於WebApi
安全、許可權認證的文章。
二、內容正文
2.1 不進行驗證
客戶端呼叫:http://api.xxx.com/getInfo?Id=value
如上,這種方式簡單粗暴,在瀏覽器直接輸入"http://api.xxx.com/getInfo?Id=value",即可獲取到相關的資訊了,但是這樣的方式會存在很嚴重的安全性問題,沒有進行任何的驗證,大家都可以通過這個方法獲取到產品列表,導致資訊洩露。
那麼我們就會有下面的疑問了:
- 如何驗證呼叫者身份呢?
- 如何防止引數被篡改呢?
- 如何保證請求的唯一性?
- 如何保證請求的唯一性,防止請求被惡意攻擊呢?
2.2 使用TOKEN+簽名認證
原理如下:
-
1.做一個認證服務,提供一個認證的
WebApi
,使用者先訪問它獲取對應的Token
-
2.使用者拿著相應的
Token
以及請求的引數和伺服器端提供的簽名演算法計算出簽名後再去訪問指定的Api -
3.伺服器端每次接收到請求就獲取對應使用者的
Token
和請求引數,伺服器端再次計算簽名和客戶端簽名做對比,如果驗證通過則正常訪問相應的Api,驗證失敗則返回具體的失敗資訊。
參考連結:
2.3 基於Owin OAuth
使用OAuth
的Client Credential Grant
授權方式,在服務端通過Authorization Server
的一個實現成功發放了Access Token
,並在客戶端成功拿到了Access Token
。在ASP.NET WebApi
中啟用OAuth的
Access Token驗證非常簡單,只需在相應的Controller或Action加上
[Authorize]標記。在ASP.NET中基於
Owin OAuth`
參考文章:
2.4 使用簽名來保證ASP.NET MVC 和 WebApi
的介面安全
給每個http請求新增一個簽名,服務端來驗證簽名的合法性,如果簽名合法則執行響應的操作,如果簽名非法則直接拒絕請求。
簽名演算法
簽名演算法一般都使用Hash雜湊演算法,常用的有MD5,SHA系列演算法。這些演算法可以根據不同的輸入,計算出不同的結果,而且碰撞的概率很低。
簽名演算法跟加密演算法不是一回事。HMAC SHA作為一種更加安全的簽名演算法,使用一個Key來影響簽名的結果。這樣同樣的輸入配合不同的Key可以得出不同的簽名,更加安全。
簽名引數
可以用Http請求的
queryString
然後加上時間戳
還有隨機數
來作為簽名的引數。
參考連結: