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

时间:2014-07-05 18:30:47

标签: json api ssl access-token api-key

我们如何阻止公共API显示主API密钥/凭证和秘密令牌?

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

read some guides(如https://github.com/interagent/http-api-design)关于良好(宁静)的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

我知道很多工具已经使用此密钥从SoundCloud用户获取/下载所有歌曲。

此外,他们所有的私密和秘密小部件都会在请求和源代码中显示秘密令牌。它们在嵌入代码的JavaScript代码中进行了硬编码。

问题包括几年,开发人员似乎没有使用安全API的经验 http://tunelab.com/2011/08/04/this-is-the-problem-with-soundcloud/

使用JavaScript和JSON的此类API如何阻止显示这些令牌和凭据?

我对此的看法:  

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

当我读到SoundCloud是最大的音乐社区并且大型音乐标签从新的或即将发行的专辑上传他们的歌曲时(即使是私人歌曲并在网站上发布小部件,秘密令牌也会显示)似乎, SoundCloud背后的团队不想保护他们的用户免受盗版/偷窃歌曲的侵害,也不愿意创建安全的API。

您如何看待soundcloud.com上的这一重要情况?如何在不泄露任何关键数据(如令牌和API密钥)的情况下以正确的方式更安全/更安全地使用JavaScript / JSON API?例如,在加载网站后使用AJAX并检索API密钥和令牌? Spotify和其他流媒体平台如何保护他们正在流式传输的数据并获取令牌和API密钥?是将这些信息存储在URL中还是请求URL安全?

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

1 个答案:

答案 0 :(得分:2)

  

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

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

然后在API调用期间不再需要HTTPS。您的用户可以使用HMAC authentication使用共享密钥对密钥进行哈希处理。