在很多項目中,因為webapi是對外開放的,這個時候,我們就要得考慮接口交換數(shù)據(jù)的安全性。
安全機制也比較多,如andriod與webapi 交換數(shù)據(jù)的時候,可以走雙向證書方法,但是開發(fā)成本比較大,
今天我們不打算介紹這方面的知識,我們說說一個較簡單也較常見的安全交換機制
在這里要提醒讀者,目前所有的加密機制都不是絕對的安全!
我們的目標(biāo)是,任何用戶或者軟件獲取到我們的webapi接口url后用來再次訪問該地址都是無效的!
達到這種目標(biāo)的話,我們必須要在url中增加一個時間戳,但是僅僅如此還是不夠,用戶可以修改我們的時間戳!
因此我們可以對時間戳 進行MD5加密,但是這樣依然不夠,用戶可以直接對我們的時間戳md5的哦,因些需要引入一個絕對安全
的雙方約定的key,并同時加入其它參數(shù)進行混淆!
注意:這個key要在app里和我們的webapi里各保存相同的一份!
于是我們約定公式: 加密結(jié)果=md5(時間戳+隨機數(shù)+key+post或者get的參數(shù))
下面我們開始通過上述公式寫代碼:
于由我的環(huán)境是asp.net mvc 的,所以重寫一個加密類ApiSecurityFilter
1、獲取參數(shù)
if (request.Headers.Contains("timestamp")) timestamp = HttpUtility.UrlDecode(request.Headers.GetValues("timestamp").FirstOrDefault()); if (request.Headers.Contains("nonce")) nonce = HttpUtility.UrlDecode(request.Headers.GetValues("nonce").FirstOrDefault()); if (request.Headers.Contains("signature")) signature = HttpUtility.UrlDecode(request.Headers.GetValues("signature").FirstOrDefault()); if (string.IsNullOrEmpty(timestamp) || string.IsNullOrEmpty(nonce) || string.IsNullOrEmpty(signature)) throw new SecurityException();2、判斷時間戳是否超過指定時間
double ts = 0; bool timespanvalidate = double.TryParse(timestamp, out ts); bool falg = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds - ts > 60 * 1000; if (falg || (!timespanvalidate)) throw new SecurityException();
3、POST/DELETE/UPDATE 三種方式提取參數(shù)
case "POST": case "PUT": case "DELETE": Stream stream = HttpContext.Current.Request.InputStream; StreamReader streamReader = new StreamReader(stream); sortedParams = new SortedDictionary<string, string>(new JsonSerializer().Deserialize<Dictionary<string, string>>(new JsonTextReader(streamReader))); break;
4、GET 方式提取參數(shù)
case "GET": IDictionary<string, string> parameters = new Dictionary<string, string>(); foreach (string key in HttpContext.Current.Request.QueryString) { if (!string.IsNullOrEmpty(key)) { parameters.Add(key, HttpContext.Current.Request.QueryString[key]); } } sortedParams = new SortedDictionary<string, string>(parameters); break;
新聞熱點
疑難解答
圖片精選