javascript - 如何设计允许安全地跨域脚本编写的 javascript API?

标签 javascript api-design

我喜欢 Google Maps 的 api 使用方式,使用脚本包含,但我很担心:

我的 api 是“半私有(private)”的,也就是说,可以通过互联网访问,但应该允许安全传输数据和某种身份验证。数据应通过网络保持私密性,并且一个消费者不应该能够获取另一个消费者的数据。

我如何使用 SSL 和某种身份验证来保证数据安全,但仍然可以从纯 HTML 页面“水平”访问而不需要服务器端代理?我需要管理 key 吗? key 如何在不被拦截的情况下发布到服务器?我可以使用 OpenId(或其他一些第 3 方身份验证)来对 api 用户进行身份验证,还是必须创建自己的身份验证机制?我在 Google 上到处都是,找不到一个好的指南来安全地设计和部署我的 API。

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

最佳答案

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

我还会寻找现有技术,例如 Amazon 的 S3 服务。

所以:

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

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

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

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

关于javascript - 如何设计允许安全地跨域脚本编写的 javascript API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060867/

相关文章:

javascript - 现在 ng-app 指令在 html 标签上, Protractor 抛出错误

javascript - 如何从指令中观看 ng-html-bind?

子类型的 rest api 接口(interface)

prolog - Prolog 3 路比较中的关系运算符符号

java - REST API - 客户端 session 状态与数据库 session 状态

javascript - 在 javascript/jquery 中将 2 个数组与对象连接起来

javascript - 滚动页面后自定义光标位置错误

javascript - 如何隐藏内容一和显示内容二?

java - 不可变类的静态与非静态方法

rest - 当端点被 feature-flag/feature-toggle 禁用时,您使用什么 HTTP 状态代码?