接口加密实现

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值