如何设计一个允许跨域脚本安全的JavaScript API?

Chr*_*all 16 javascript api-design

我喜欢谷歌地图的api消费方式,使用脚本包括,但我很担心:

我的api是"半私有的",即可通过互联网访问,但应允许安全传输数据和某种身份验证.数据应该通过网络保持私有,并且一个消费者不应该能够获得另一个数据.

我如何使用SSL和某种身份验证来保证数据安全,但仍然可以从纯HTML页面"水平"访问,而不需要服务器端代理?我需要管理密钥吗?如何在不截获的情况下将密钥发布到服务器?我可以使用OpenId(或其他一些第三方身份验证)来验证api用户,还是必须创建自己的身份验证机制?我一直在谷歌,无法找到安全设计和部署我的API的好指南.

现在我正在使用REST和AJAX来使用它们,但是跨域调用是不可能的.任何帮助或正确方向的指针将非常感激.

T.J*_*der 10

我可能会使用动态生成的脚本标记,其中包含SSL URL,该URL包含公钥加密的查询字符串中的密钥.服务器将使用私钥来解密查询字符串参数并返回包含相关信息的脚本(如果密钥无效,则返回脚本).或类似的规定.但我承认在实践中我实际上并没有这么做.

我也会寻找现有技术,比如亚马逊的S3服务.

所以:

  1. 用户提供秘密
  2. 客户端代码使用公钥来加密秘密
  3. JavaScript附加script包含URL 的标记
  4. 服务器处理脚本请求,解密秘密,检查它,并发回相关的响应.

您可能需要两个周期,因为否则可以通过中间人攻击重新使用对服务器的请求.那将是:

  1. JavaScript附加一个script请求唯一密钥的标记(可能包含一些混淆信息,如源IP和一些随机的其他密钥)
  2. 服务器使用与该IP绑定的一次性密钥进行响应
  3. 用户提供秘密
  4. 客户端代码使用公钥来加密秘密,包括来自#1的唯一密钥
  5. JavaScript附加script包含URL 的标记
  6. 服务器处理脚本请求,解密秘密,检查它,并发回相关的响应.
  7. 可以使用#1中包含的随机密钥对响应进行加密(在某种程度上)

我实际上没有做过.(或者我?BWAa-ha-ha-ha ......) FWIW.