这样的明文接口设计是否已经满足了大多数场景下的 openapi 的安全要求

发布于 2022-09-05 08:18:35 字数 645 浏览 21 评论 0

前提说明:面向应用的 openapi 调用(不使用 ouath 验证)

首先分配给调用方 appKey(用于身份校验)和 appSecret(用于签名)

接口基本构成 appKey,reqId,timstamp,业务参数,sign

最后的参数 sign = md5(appSecret+appKey=xxx+reqId=xxx+timestamp=xxx+username=xx+vip=xxx+appSecret) 参数是以 key 增序排列的 增加了 reqId (使用 UUID)用来防范重放攻击

说明: 我们假定 timestamp 的有效时间是 1 小时,即 now-1 <timestmap< now+1 都是有效的 这时 reqId(存储在 redis 中)我们设置有效时间是 1 小时 校验逻辑是先验证签名,再验证 timstamp 有效性,再验证 reqId 有效性。 sign 保证了传输过程中没有被篡改,timestamp+reqId 保证没有重放攻击(因为在接下来的一个小时内,重放攻击发生时,因为 reqId 已经使用过,服务会被拒绝。过了这个小时,重放攻击会因为 timstamp 失效而被拒绝服务)

后端:reqId 存放在 redis,appSecret 也存放在 redis 用来提高访问性能

后续:启用 https 可以防止明文传输被人解读

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱格式化 2022-09-12 08:18:35

基本上还是满足了,而且一般也都是这样操作的。
只是感觉这个时间戳的有效时间设置的有一点点长。
然后就是,客户端的话要注意密钥的保存,要预防反编译

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文