国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net mvc webapi 實用的接口加密方法示例

2024-07-10 12:48:57
字體:
供稿:網(wǎng)友

在很多項目中,因為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;            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 松溪县| 梅州市| 宾阳县| 平顺县| 从江县| 库车县| 汽车| 高台县| 什邡市| 微博| 成安县| 永新县| 仁怀市| 乌拉特中旗| 石河子市| 寿宁县| 察哈| 天峻县| 临澧县| 奉新县| 岢岚县| 天峻县| 公安县| 颍上县| 定襄县| 邵武市| 华蓥市| 特克斯县| 钦州市| 喀喇| 平和县| 杨浦区| 东源县| 鄱阳县| 东方市| 慈溪市| 荃湾区| 巴里| 青岛市| 彭泽县| 三亚市|