1

我已经为我的新服务开发了一个 API,并且正在为此 API 开发 SDK(php、ruby 和 JavaScript)。

一些对 API 的调用对公众开放,但有些需要 API 密钥和 API 机密。我的问题是,我如何确保人们在使用 JavaScript API 时可以隐藏他们的密钥和秘密。

我会想象这样的电话:

jQuery.ajax({
    url:'http://api.domain.com/v1/display/',
    data: {offset:0, limit:0, apiKey:'apikeynotlikelogin',apiSecret:'apisecretlikepassword'},
    success: function(data){
        alert(data);
    }
});

但是现在几乎每个人都知道,如果他们在chrome中打开firebug甚至更简单的ctrl+shift+j,他们可以看到代码以及上面的所有信息。我考虑了很多选项,但在我看来,似乎没有办法在前端隐藏 apiKey 和 apiSecret。

有什么建议么?我肯定有办法。

谢谢!

编辑:

感谢大家的回答并试图解决问题。以下是一些答案,为什么仍然不是我需要的:

  1. 在请求中使用域名以确保其来自正确的客户端。这是有效的建议,但仍然很容易被伪造

  2. 为每个呼叫生成唯一密钥这似乎更高级,但我再次发现它不适用于我的情况。我需要授权“应用程序”(人们在系统中注册以获得凭据并授权 API),因为用户将拥有不同级别的隐私设置,并且根据这些客户端将获得结果。

因此,如果我让客户端首先调用“握手”以获取会话唯一密钥,但随后(在握手或下一个请求中),客户端必须发送他的 apiKey 和 apiSecret 以授权 API 并获得正确的结果(根据政策等)所以最后和没有握手请求完全一样,任何知道apiKey和apiSecret的人都可以先调用握手然后授权。希望有意义

4

1 回答 1

0

你可以让它变得更难,但你不能真正保护它。

您可以让他们注册他们将要发出请求的页面,并在检查身份验证时检查请求是否来自授权来源。不完美,因为这可以被伪造,但对于普通用户来说更难。

或者他们可以通过服务器进行代理,但这并没有多大帮助,因为他们需要保护对其代理的访问。

于 2013-01-26T01:07:18.320 回答