接口安全机制
HMAC-SHA1(基于SHA1哈希算法的消息验证代码) 是一种键控哈希算法。 此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。 输出的哈希值长度为 160 位。
虽然安全哈希算法(Secure Hash Algorithm,简称SHA1)是一种不可逆的加密算法,但是由于同样的内容计算之后结果是相同的,且不会重复,所以通过暴力计算,也是能够还原数据。所以HMAC-SHA1就在SHA1的基础上,增加一个密钥。如此一来,只要密钥不被泄漏,就无法破解信息内容。
在接口验证过程中,将要发送的数据参数,再加上要发送时刻的时间片和密钥,通过HMAC-SHA1一并进行计算,请求的时候将计算得到的签名作为参数发送给服务器。服务器也要根据本地保存的密钥再计算一次,与客户端提供的签名进行对比。相同则为授权成功。
通过HMAC-SHA1做加密处理,可以防止请求参数被恶意修改。如果参数被修改,签名也会随之变化,所以单纯的修改参数将会导致服务器授权验证失败。再传入的参数之中再加入时间片信息,如果和服务器时间相差过大,该请求也会被抛弃。
基于beego框架实现接口验证,使用它提供的过滤器就能实现。过滤器函数如下所示:
三个参数:
<ul><li>路由规则,可以根据一定的规则进行路由,如果你全匹配可以用<code class="highlighter-rouge">*</code></li> <li>postion 执行 Filter 的地方,四个固定参数如下,分别表示不同的执行过程 <ul><li>BeforeRouter 寻找路由之前</li> <li>BeforeExec 找到路由之后,开始执行相应的 Controller 之前</li> <li>AfterExec 执行完 Controller 逻辑之后执行的过滤器</li> <li>FinishRouter 执行完逻辑之后执行的过滤器</li> </ul></li> <li>filter filter 函数<code class="highlighter-rouge">type FilterFunc func(*context.Context)</code></li> </ul>路由规则用来匹配过滤器。过滤的位置有4个。我们这里是要校验请求参数,那么调用得靠前一些,能够减少后面不必要的计算。所以用<code class="highlighter-rouge">BeforeRouter</code>较好。校验函数如下:
校验是根据传入的参数<code class="highlighter-rouge">size</code>和<code class="highlighter-rouge">timestape</code>进行,还需要传入<code class="highlighter-rouge">sign</code>签名用于比对。过滤器函数传入了上下文对象<code class="highlighter-rouge">*context.Context</code>。如果传入的时间片和系统时间相差超过10分钟,会被认为是过期请求。
校验函数用了Golang的<code class="highlighter-rouge">crypto/hmac</code>和<code class="highlighter-rouge">crypto/sha1</code>包:
加密的结果是<code class="highlighter-rouge">[]byte</code>类型,还需要转换成可读的16进制编码,通过包<code class="highlighter-rouge">encoding/hex</code>即可实现。
接口加密还可以使用HTTPS加密的传输方式,这个我还不懂,以后明白了再写。
######<em>参考文献</em> 【1】过滤器 - beego开发文档
原文链接:接口安全机制,转载请注明来源!
到此这篇关于“接口安全机制”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
.NET框架中基于角色的安全性(3)
安全狗屏蔽端口怎么解除?取消加入安全策略方法
GO接口应用场景说明
Win8.1下VMware虚拟机无法安装虚拟网卡怎么办?
360安全卫士彻底清除无法删除的文件 “文件粉碎机”一键搞定
PHP开发api接口安全验证
25个必须记住的ssh命令
解决电脑不能开机解救教程
Windows 2003下安装VS2008时.NetFramework3.5组件安装失败的解决方法
Windows 8更换Windows XP系统错误提示0x000000A5