首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护API密钥

保护API密钥
EN

Stack Overflow用户
提问于 2013-09-28 14:32:05
回答 1查看 400关注 0票数 0

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

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

访问乔网站将能够上传数据到乔的帐户在我的网站上。乔的网站将决定谁可以访问,谁可以修改,谁可以上传新的信息到乔的帐户在我的网站。

我考虑在我的网站上发布一个API,让Wordpress插件访问它。我知道Joe的网站将有一个api密钥,这将允许他的网站认证到我的网站。然而,怎样才能阻止其他人使用API密钥并假装是Joe的网站呢?

我已经看到了我想要做的类似的实现,当我检查客户端的代码时,我可以看到api键。怎样才能阻止我使用api密钥并假装是网站呢?

是否有一种方法来保护API密钥,这样访问Joe网站的人就不会看到它?

我在这里看到了这个答案:如何安全使用api键

然而,当Joe的网站将其发布到我的网站请求时,访问者不会仍然能够看到钥匙吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-28 14:36:44

API密钥将在另一个网站的服务器端用于与您的网站进行通信,因此客户端将无法看到它。

API键不能从用户浏览器直接用于访问站点资源,因为由于安全风险,跨站点请求伪造将被浏览器阻塞。

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

如何实现它:

您应该有一个可以处理其他站点请求以更新用户配置文件的URL,例如:

代码语言:javascript
复制
www.yoursite.com/api/updateprofile

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

例如,如果您想要支持GET请求,那么告诉其他站点他们可以在上面的Url上执行操作,给出参数: api_key、user_id、first_name (可选)、last_name (可选)

站点中使用的示例:

代码语言:javascript
复制
www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"

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

--我认为PHP中的语法类似于以下内容,但我不确定:

代码语言:javascript
复制
var api_key = GET["api_key"];
var user_id = GET["user_id"];

更新2:

下面是一个给您演示的图表:

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19068030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档