保护API密钥

时间:2013-09-28 14:32:06

标签: api

我有一个为用户存储数据的网站。我正在开发一个Wordpress插件,允许其他网站访问为每个用户存储的数据并上传新数据。

例如,Joe在我的网站上创建了一个帐户并上传了信息。 Joe在自己的网站上安装了该插件,这样他就可以访问自己网站上存储在我网站上的数据。

Joe网站的访问者可以将数据上传到我网站上的Joe帐户。 Joe的网站将确定谁可以访问,谁可以修改以及谁可以将新信息上传到我网站上的Joe帐户。

我考虑在我的网站上发布API并让Wordpress插件访问它。我知道Joe的网站会有一个api密钥,允许他的网站对我的网站进行身份验证。然而,什么会阻止其他人使用该API密钥并伪装成Joe的网站?

我已经看到了我想要做的类似的实现,当我检查客户端的代码时,我可以看到api密钥。什么会阻止我使用该api密钥并伪装成网站?

有没有办法保护API密钥,以便Joe的网站访问者看不到它?

我在这里看到了这个答案:How to securely use api key

但是当Joe的网站在我的网站上发布请求时,访客仍然无法看到密钥吗?

感谢。

1 个答案:

答案 0 :(得分:4)

API Key将在其他网站的服务器端用于与您的网站进行通信, 所以客户端将无法看到它。

无法直接在用户浏览器中使用API​​密钥来访问您的网站资源,因为它会Cross-site request forgery由于安全风险而被浏览器阻止。

如果对您网站的请求也是加密的(https),那么即使有人以某种方式观看流量,他也无法获取API密钥。

如何实施它:

您应该有一个URL可以处理其他网站更新用户个人资料的请求,例如:

www.yoursite.com/api/updateprofile

现在您应该决定是否要支持GET / POST请求提供的数据(或支持两者)。

例如,如果您想支持GET请求,请告诉其他网站,他们可以使用给定的参数对上面的Url执行操作: api_key,user_id,first_name(可选),last_name(可选)

其网站中的使用示例:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"

为了在您的网站上实现它,只需解析请求并尝试获取参数,同时验证API密钥。

我认为PHP中的语法如下所示,但我不确定:

var api_key = GET["api_key"];
var user_id = GET["user_id"];

更新2:

以下是向您说明的图表:

Joe的用户浏览器< ----> Joe的服务器---(API_KEY)--->您的网站API

客户端无法访问密钥,因为Joe的服务器根本不会将其发送到客户端, 客户甚至不知道您的网站存在。