让我们假设有一项服务如下;
http://exmaple.com/service1/GetSomething?apikey= {API-钥匙进入-这里}
我的api密钥是:96a143c8-2f62-470c-b81f-dec5fc271873
所以我们会打电话给> http://exmaple.com/service1/GetSomething?apikey=96a143c8-2f62-470c-b81f-dec5fc271873链接,它以JSON的形式返回响应。
当我使用JQuery(或任何其他客户端JavaScript库)使用它时,该密钥将如何安全?我在想,我认为没有办法。如果我打算通过客户端电话拨打该服务,那将是我们公开的。
对此有何看法?
感谢。
答案 0 :(得分:9)
代理。
将值发布到您的某个页面,然后从此页面在服务器端发出实际请求,然后返回您获得的值。
值得注意的是:您无法使用javascript发出跨域请求,主要是出于安全考虑,浏览器不允许这样做。
答案 1 :(得分:2)
从客户的角度保护它的唯一方法是将服务器上的API代理请求并在您的应用中添加该密钥。
答案 2 :(得分:0)
我找到的最佳方法是为您的用户提供API_KEY和SECRET_KEY。
构建您的REST API请求,传递API_KEY,时间戳和拨打电话所需的任何其他参数。
使用PHP之类的脚本语言使用SECRET_KEY双向加密创建API_SIGNATURE变量,并将其附加到您的基本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。
非常简单。