JQuery $.ajax.post 到具有秘密 API 密钥的服务
JQuery $.ajax.post to a service with secret API Key
让我们假设有一个服务如下;
http://exmaple.com/service1/GetSomething?apikey={api-key-goes-here}
我的 API 密钥是:96A143C8-2F62-470C-B81F-DEC5FC271873
因此,我们将调用> http://exmaple.com/service1/GetSomething?apikey=96a143c8-2f62-470c-b81f-dec5fc271873 链接,它将响应作为 JSON 返回。
当我用JQuery(或任何其他客户端JavaScript库)使用它时,该密钥将如何安全?我在想,我想没有办法。如果我打算通过客户端调用来调用该服务,它将是我们的公开电话。
对此有什么想法吗?
谢谢。
创建一个代理。
将值发布到您的一个页面,然后从此页面在服务器端发出真正的请求,然后返回您获得的值。
注意:你不能用javascript发出跨域请求,主要是浏览器出于安全原因不允许这样做。
客户端角度保护它的唯一方法是将请求代理到服务器上的 API 并在应用程序中添加该密钥。
我发现最好的方法是给你的用户一个API_KEY和一个SECRET_KEY。
构建 REST API 请求,传入进行调用所需的API_KEY、时间戳和任何其他参数。
使用像 PHP 这样的脚本语言创建一个API_SIGNATURE变量,使用双向加密与您的SECRET_KEY并将其附加到您的基本 url,这就是您作为请求触发的内容。
现在任何人都可以看到该请求,这就是您将时间戳作为参数输入的原因。 基本上,您可以放置一个约束,该约束将仅处理不到一分钟的请求。
示例:(用脚本语言执行此部分)
$API_BASE_URL="http://api.yourdomain.com/1.1/comments.json?api_key=2002×tamp=2323234544&id=4";
$API_KEY=300;
$API_SIGNATURE=hash_hmac('sha256', API_BASE_URL, API_KEY);
$API_URL=$API_BASE_URL.'&api_signature='.$API_SIGNATURE;
--
现在在你的jquery ajax url中:使用PHP回显出$API_URL。
--
在 API 中,当您收到请求时,您会根据API_KEY查找用户帐户并获取其SECRET_KEY并解密签名,并确保与传入的内容匹配。 如果现在通过,请检查时间戳并确保请求不到一分钟。
您还可以在处理请求之前进行速率限制和一大堆其他操作。
就是这样。
人们还说浏览器不允许跨域请求。 如果您请求 json,则确实如此,但您可以使用 jsonp 解决此问题。
该hash_hmac提供多种编程和脚本语言版本。 因此,如果你开发一个API,你可以在网络上用PHP使用它,在你的iPhone应用程序中用目标c使用它。
很简单。
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 谷歌地图JS API+JSON-多个标记没有显示
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 如何在 API 调用后和 if 语句中启用提交按钮
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 搜索api在mac上显示对话框
- 如何在Javascript中正确生成Facebook Graph API应用程序秘密证明
- 如何在使用客户端Javascript时保持API密钥的秘密
- Coinbase.com API + node.js中的秘密HMAC认证
- JQuery $.ajax.post 到具有秘密 API 密钥的服务
- JS Dropbox API帐户秘密