接口加密实现

来源:互联网 发布:windows桌面插件api 编辑:程序博客网 时间:2024/06/16 08:55

3.接口参数加密+接口时效性验证(一般达到这个级别已经非常安全了)

继上一步,你发现有不明不白的人调用你的接口,你很不爽,随即把真正需要调用接口的人又叫来,告诉他们每天给他们换一把钥匙。和往常一样,有个别伙伴的钥匙被小偷偷走了,小偷煞费苦心,经过数天的踩点观察,准备在一个月黑风高的夜晚动手。拿出钥匙,捣鼓了半天也无法开启你的神圣之门,因为小偷不知道你天天都在换新钥匙。

小偷不服,经过一段时间琢磨,小偷发现了你们换钥匙的规律。在一次获得钥匙之后,不加思索,当天就动手了,因为他知道他手里的钥匙在第二天你更换钥匙后就失效了。

结果,小偷如愿。怎么破?先看这个场景的代码,然后继续往下看!

“`
///
/// 接口加密并根据时间戳判断有效性
///
///
[HttpGet]
[Route(“SecureBySign/Expired”)]
public HttpResponseMessage SecureBySign_Expired([FromUri]int age, long _timestamp, string appKey, string _sign)
{
var result = new ResultModel()
{
ReturnCode = 0,
Message = string.Empty,
Result = string.Empty
};

        #region 判断请求是否过期---假设过期时间是20秒        DateTime requestTime = GetDateTimeByTicks(_timestamp);        if (requestTime.AddSeconds(20) < DateTime.Now)        {            result.ReturnCode = -1;            result.Message = "接口过期";            return GetHttpResponseMessage(result);        }        #endregion        #region 校验签名是否合法        var param = new SortedDictionary<string, string>(new AsciiComparer());        param.Add("age", age.ToString());        param.Add("appKey", appKey);        param.Add("_timestamp", _timestamp.ToString());        string currentSign = SignHelper.GetSign(param, appKey);        if (_sign != currentSign)        {            result.ReturnCode = -2;            result.Message = "签名不合法";            return GetHttpResponseMessage(result);        }        #endregion        var dataResult = stulist.Where(T => T.Age == age).ToList();        result.Result = dataResult;        return GetHttpResponseMessage(result);    }

转载地址:http://www.cnblogs.com/codeon/p/6123863.html

原创粉丝点击