我正在设计一个 JSON Web API,并希望通过唯一的 ID 来区分客户端,以监控使用情况并阻止恶意/行为不端的客户端。该 API 没有封装在 JavaScript 库中,也不是 Web 应用程序独有的,任何客户端类型都可以使用它(桌面、电话等)。
问题是,网络应用程序(官方网站)也是 API 本身的客户端,因此必须公开其 API 密钥。因此,某些用户可以直接从页面上的 JavaScript 中提取密钥并使用它,而不是生成自己的密钥。
是否有可能通过一些更好/更智能的设计选择以某种方式缓解这个问题,还是我必须接受这样一个事实,即任何恶意使用 API 的人都可以利用这一点?
我对前端应用程序 (EmberJS) 和后端服务器 (Go) 有 100% 的控制权,因此可以建议任何更改。
- 我正在使用每个会话/IP 的速率限制来为这种情况添加额外的保护层
- twitter.com 页面曾经也是它自己的 API 的客户端。他们是怎么解决的?
注意:问题不在于身份验证或安全性本身,而是如何要求第 3 方用户在身份验证之外(!)使用 API 密钥!