一、前言
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
然后加上時間戳
還有隨機數
來作為簽名的參數。
參考鏈接:
2.5 WebApi 跨域問題解決方案:CORS
出於安全考慮,瀏覽器會限制腳本中發起的跨站請求,瀏覽器要求JavaScript或Cookie只能訪問同域下的內容。
參考鏈接:
三、文章推薦
- Asp.net Web API安全認證解決方案:JSON Web Token(JWT)http://blog.zhishile.com/Article/Show/5df2a392-8a8c-4e12-8a05-774f47a4570a
- 基於token的多平台身份認證架構設計 http://www.cnblogs.com/beer/p/6029861.html