我们如何防止公共API泄露主API密钥/凭据和秘密令牌?
我目前正在开发一个Web应用程序,其中包含一些公共API,应该使用API密钥和秘密令牌,并且正在寻找创建非常安全的API的方法,查看了一些最大平台的API,例如SoundCloud。
我 阅读 了 一些 指南(例如https://github.com/interagent/http-api-design),关于良好的(RESTful)API设计,但它们没有提供有关安全性(API密钥和令牌)以及在公共API中如何检索或创建它们的信息。
请查看https://a-v2.sndcdn.com/assets/sc-q9dV-e79e4b4a.js,并搜索b45b1aa10f1ac2941910a7f0d10f8e28
这是SoundCloud的主API密钥。
他们的一些网址看起来像这样:
https://api.soundcloud.com/tracks/id/stream?client_id=client_id
https://api.soundcloud.com/tracks/id/stream?secret_token=secret_token&client_id=client_id
https://api.soundcloud.com/playlists/playlist_id/?secret_token=secret_token&client_id=client_id
- 主API密钥应仅通过soundcloud.com访问/使用
- 所有API密钥都应有某种域名/IP阻止/限制/防火墙
- 对于所有API密钥,应使用OAUTH,而不仅仅是没有身份验证的简单JSON API
- 动态生成一次性(秘密)令牌,不要一直重复使用相同的令牌
- 动态从SoundCloud服务器获取API密钥和令牌,而不是将它们放入嵌入代码和请求中
- 使用某种隐写术
你如何看待soundcloud.com上的这种紧急情况,如何才能更安全地使用JavaScript/JSON API,而不会泄露像令牌和API密钥这样的关键数据?例如,使用AJAX在网站加载后检索API密钥和令牌? Spotify和其他流媒体平台如何保护他们所播放的数据并获取令牌和API密钥?将这些信息存储在URL或请求URL中是否安全?
如何使用JavaScript、HTML、AJAX和PHP安全地向用户发送API密钥和秘密令牌?