JQuery $.ajax.post 到具有秘密 API 密钥的服务

JQuery $.ajax.post to a service with secret API Key

本文关键字:API 秘密 密钥 服务 ajax post JQuery      更新时间:2023-09-26

让我们假设有一个服务如下;

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&timestamp=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使用它。

很简单。