如何写出安适的API接口(参数加密+超时措置惩罚惩罚+私钥验证+Https)

时间:2021-11-19 02:33:20

上篇文章说到接口安适的设计思路,如果没有看到上篇博客,建议看完再来看这个。

通过园友们的讨论,以及我本身查了些资料,,然后对接口安适做一个相对完善的总结,答理给大家写个demo,今天一并放出。

对付安适也是相对的,下面我来按照安适级别分析

1.完全开放的接口

有没有这样的接口,谁都可以挪用,谁都可以访谒,不受时间空间限制,只要能连上互联网就能挪用,毫无安适可言。

实话说,这样的接口我们天天都在接触,你查快递,你查天气预报,你查飞机,火车班次等,这些都是有大众的接口。

我把这称之为裸奔时代。代码如下:

/// <summary> /// 接口对外果然 /// </summary> /// <returns></returns> [HttpGet] [Route("NoSecure")] public HttpResponseMessage NoSecure(int age) { var result = new ResultModel<object>() { ReturnCode = 0, Message = string.Empty, Result = string.Empty }; var dataResult = stulist.Where(T => T.Age == age).ToList(); result.Result = dataResult; return GetHttpResponseMessage(result); }

2.接口参数加密(根本加密)

你写个接口,你只想让特定的挪用方使用,你把这些挪用的人叫到一个小房子,给他们公布发表说我这里有个接口只筹算给你们用,我给你们每人一把钥匙,你们用的时候拿着这把钥匙即可。

这把钥匙就是我上文说到的参数加密法则,有了这个法则就能挪用。

这有安适问题啊,这里面的某个成员如果哪个不小心丢了钥匙或者被人窃取,掌握钥匙的人是不是也可以来失用接口了呢?而且他可以复制很多钥匙给不明不白的人用。

相当于有人拿到了你的请求链接,如果业务没有对链接独一性做判断(实际上业务逻辑凡是不会把每次请求的加密签名记录下来,所以不会做独一性判断),就会被反复挪用,有必然安适缝隙,怎么破?先看这个场景的代码,然后继续往下看!

/// <summary> /// 接口加密 /// </summary> /// <returns></returns> [HttpGet] [Route("SecureBySign")] public HttpResponseMessage SecureBySign([FromUri]int age, long _timestamp, string appKey, string _sign) { var result = new ResultModel<object>() { ReturnCode = 0, Message = string.Empty, Result = string.Empty }; #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); }

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

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

小偷不平,颠末一段时间琢磨,小偷发明了你们换钥匙的规律。在一次获得钥匙之后,不加思索,当天就动手了,因为他知道他手里的钥匙在第二天你改换钥匙后就掉效了。

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