为什么国内云服务商的 API 鉴权机制往往比较复杂而国外的相对简单?

2020-10-05 22:19:40 +08:00
 Explr

腾讯云和阿里云的 API 鉴权都是公共参数+接口参数排序后计算 HMAC 当作签名。而 Cloudflare,Github,Godaddy 的 API 往往都是直接把凭据写进 HTTP 头,然后直接发请求。

腾讯云 API

阿里云 API

Cloudflare API

Github API

使用 HMAC 的优点是凭据无需通过互联网传输,然而 API Key 的特点就是很长,保存在计算机上而不是用脑子记,可以定期更换,泄露也不会导致撞库攻击,为什么要对 API Key 采取比密码更严格的保护措施?以及 HMAC 方案应对的威胁模型是什么?

另外,阿里云和腾讯云的 API 都单独具有抗重放攻击性,在两端点不被入侵的情况下 HTTPS 已经确保了这一点。如果客户机或服务器被入侵,HMAC 签名似乎也只能增大一点点攻击难度,理论上并不能阻止入侵或非法调用 API 。

再者就是,如果一定要用数字签名,为什么他们不用JWS之类的方案,而要用排序接口参数再签名的方案?文档上也往往没有具体说排序的标准,大写在前还是小写在前也不清晰,尽管接口行为往往和编程语言的排序库行为一致,不过作为 API 文档来说,这是有歧义的。

并且,阿里云 API 接口编码来编码去的,好像也没有比 JWS 简洁多少……

3096 次点击
所在节点    程序员
5 条回复
oott123
2020-10-05 22:27:06 +08:00
你比较的对象错了,你要去看看 AWS 的 API 咋签名的,因为国内这些云也是参考 AWS 之类的东西的
kangsheng9527
2020-10-05 22:35:17 +08:00
相互伤害(增加攻击成本,计算消耗了攻击方 cpu 时间),防止低成本攻击。
正如你说的保护原始 key 。。。增加接触 api 的人员门槛有助于整个圈子的健康。。。
我是认同国内这一套的。。。
刚好我也用过阿里云 api 。。。
Explr
2020-10-05 22:38:21 +08:00
@oott123 有道理,AWS 的方案是相似的,我最近在维护一个 ACME 客户端,从 Let's encrypt 自动获取数字证书,要用 API 增删 DNS 记录,所以就把阿里云、腾讯云和 Cloudflare 、Godaddy 联系起来了。不过说真的,为啥不用 JWS……
Explr
2020-10-05 22:40:09 +08:00
@kangsheng9527 对,不过我总不能为了增删一下 DNS 记录,就把整个阿里云 SDK 加进项目依赖吧……API 调用还得自己写……
lihongming
2020-10-07 01:51:09 +08:00
安全性和方便性肯定是相对的,但有 SDK 的情况下,自己其实不用处理签名,通过 SDK 发起请求就好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712678

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX