在开放给第三方使用的API中,如果让第三方携带明文的token请求服务,极有可能泄漏token。由于第三方身份验证服务器是依赖于token的,这样会造成不良的后果。为了提高通信的安全性,我们需要加密token,就是URL签名了。
实现URL的签名过程
- 生成URL签名的signature,假设第三方获取到token后,token=“aff9u87kkk444hjg”,openId=8996,将要调用的API路径是zithan.test/user/show,那么URL签名如下:
signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg')
- 组合API的路径
zithan.test/user/show?openId=8996&signature=1aba61306711521e8b52ac2f46bb3ebf
- 但是现在还有一个问题,就是重放攻击,没有过期时间,假设非法者截获了这个API路径,就能反复调用这个路径。 改进方法是增加时间戳,增加API路径的时效性。
signature=md5('zithan.test/user/show?openId=8996&token=aff9u87kkk444hjg×tamp=1550732083')
zithan.test/user/show?openId=8996×tamp=1550732083&signature=cba2aa328577e6aab3e811517e1aa752
注意事项
- md5可以换成其他非对称加密的方法
- 在获取token那一个步骤也有可能泄露token,那么严谨就需要采取对称加密,进行数据加密。
- 因为增加了时间戳,那么就有可能导致第三方和服务器的差异性,那么就需要计算第三方的时间差,在验证签名或者生成签名的时候考虑进去。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。