我们如何通过网络将API密钥和秘密令牌安全地传递给用户



我们如何防止公共API泄露主API密钥/凭据和秘密令牌?

我目前正在开发一个带有一些公共API的web应用程序,这些API应该使用API密钥和秘密令牌,并且正在寻找一种方法来创建一个非常安全的API,并查看了一些最大平台的API,例如SoundCloud。

我读了一些关于良好(restful) API设计的指南(如https://github.com/interagent/http-api-design),但它们没有提供太多关于安全性(API密钥和令牌)以及如何在公共API中检索或创建它们的信息。

查看https://a-v2.sndcdn.com/assets/sc-q9dV-e79e4b4a.js并搜索b45b1aa10f1ac2941910a7f0d10f8e28

这是SoundCloud的主API密钥。

他们的一些url是这样的:
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

我知道有很多工具已经使用这个键从SoundCloud用户那里获取/下载所有的歌曲。

它们所有的私有和秘密小部件都显示了秘密令牌,在请求和源代码中也是如此。它们被硬编码在嵌入代码的JavaScript代码中。

这个问题已经存在好几年了,开发人员似乎没有安全api的经验http://tunelab.com/2011/08/04/this-is-the-problem-with-soundcloud/

使用JavaScript和JSON的api如何防止泄露这些令牌和凭据?

我的想法是:

  • 主API密钥应该只能通过/from soundcloud.com访问
  • 应该为所有API密钥设置某种类型的域/IP阻塞/限制/防火墙
  • 对所有API密钥使用OAUTH,而不仅仅是一个没有身份验证的简单JSON API
  • 动态生成一次性(秘密)令牌,不要一直重复使用相同的令牌
  • 从SoundCloud服务器动态获取API密钥和令牌,而不是将它们放入嵌入代码和请求
  • 使用某种隐写

当我读到SoundCloud是最大的音乐社区和大的音乐厂牌上传他们的歌曲从新的或即将发行的专辑(即使是私人歌曲,并在网站上发布一个小部件,秘密令牌也被透露),似乎背后的团队SoundCloud不想保护他们的用户免受盗版/窃取歌曲,不愿意创建一个安全的API。

您如何看待soundcloud.com和上的这种危急情况,JavaScript/JSON API如何在不泄露任何关键数据(如令牌和API密钥)的情况下更加安全/安全?例如,使用AJAX并在网站加载后检索API密钥和令牌?Spotify和其他流媒体平台如何保护他们正在流媒体的数据并获得令牌和API密钥?将这些信息存储在URL或请求URL中安全吗?

如何使用JavaScript, HTML, AJAX和PHP安全地将API密钥和秘密令牌发送给我的用户?

我如何将API密钥和秘密令牌通过网络安全地传递给用户?

只有一种可靠的方法:使用HTTPs为您的网站允许用户检索密钥。

在API调用期间,不再需要HTTPS。您的用户可以使用HMAC身份验证使用共享密钥散列密钥。

最新更新