接口开发安全问题
- 2019 年 12 月 17 日
- 筆記
接口开发安全问题
公司业务扩展需要,需对外提供接口给其他第三方系统使用。很多人说是系统并不安全,缺乏安全考虑。所以抽出时间思考整理了一番
采用认证 + 签名验证的方式来进行传输
认证 : (认证方式为: Oauth2
) 其他外部系统调用垂直系统接口需通过垂直系统提供的指定账号密码进行登录,获取秘钥。
Authorization:Bearer y3XWtwWaxqCEBDoE-qzZk0bCp3UKO920
签名验证 满足第一步条件,方可进行签名验证。
签名所需参数:
- 秘钥(垂直系统提供)
- token (令牌 登录可获取)
- timestamp (时间戳)
- 以及其他参数
- sign 签名
签名生成步骤:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 特别注意以下重要规则:
参数名 ASCII 码从小到大排序(字典序);
如果参数的值为空不参与签名;
参数名区分大小写;
验证调用返回或微信主动通知签名时,传送的 sign 参数不参与签名,将生成的签名与该sign值作校验。
第二步,在stringA最后拼接上 key 得到 stringSignTemp 字符串,并对 stringSignTemp进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值 signValue。 签名算法与微信一致。上方一些内容来自微信开发文档
IP白名单,第三方需要联调需提供外网机器IP地址 说了这么多,本身也不确定此方案可不可行,但是应该也差不多吧。另外对于特别铭感信息.需采用 HTTPS 协议进行传输
具体实现就是接下来的问题了,下一章节,(采用 Yii2.0)进行详细描述。