我喜欢 Google Maps 的 api 使用方式,使用脚本包含,但我很担心:
我的 api 是“半私有(private)”的,也就是说,可以通过互联网访问,但应该允许安全传输数据和某种身份验证。数据应通过网络保持私密性,并且一个消费者不应该能够获取另一个消费者的数据。
我如何使用 SSL 和某种身份验证来保证数据安全,但仍然可以从纯 HTML 页面“水平”访问而不需要服务器端代理?我需要管理 key 吗? key 如何在不被拦截的情况下发布到服务器?我可以使用 OpenId(或其他一些第 3 方身份验证)来对 api 用户进行身份验证,还是必须创建自己的身份验证机制?我在 Google 上到处都是,找不到一个好的指南来安全地设计和部署我的 API。
现在我正在使用 REST 和 AJAX 来使用它们,但跨域调用是不可能的。任何帮助或正确方向的指示将不胜感激。
最佳答案
我可能会使用带有 SSL URL 的动态生成的脚本标记,该 URL 在查询字符串中包含一个 key ,该 key 是公钥加密的。服务器将使用私钥解密查询字符串参数并返回包含相关信息的脚本(如果 key 无效,则不返回)。或类似的规定。但我承认我实际上并没有在实践中这样做。
我还会寻找现有技术,例如 Amazon 的 S3 服务。
所以:
- 用户提供 secret
- 客户端代码使用公钥加密secret
- JavaScript 附加一个包含 URL 的
script
标签 - 服务器处理脚本请求,解密 secret ,检查它,并发回相关响应。
您可能需要两个周期,否则可能会通过中间人攻击重新使用对服务器的请求。那将是:
- JavaScript 附加一个请求唯一 key 的
script
标签(可能带有一些混淆信息,例如源 IP 和一些随机的进一步 key ) - 服务器使用绑定(bind)到该 IP 的一次性 key 进行响应
- 用户提供 secret
- 客户端代码使用公钥加密 secret ,包括来自#1 的唯一 key
- JavaScript 附加一个包含 URL 的
script
标签 - 服务器处理脚本请求,解密 secret ,检查它,并发回相关响应。
- 可以使用#1 中包含的随 secret 钥(在某种程度上)很好地加密响应
我实际上没有做过。 (或者我有吗?BWAa-ha-ha-ha...) FWIW。
关于javascript - 如何设计允许安全地跨域脚本编写的 javascript API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060867/