保护API密钥

保护API密钥,api,Api,我有一个为用户存储数据的网站。我正在开发一个Wordpress插件,允许其他网站访问为每个用户存储的数据并上传新数据 例如,Joe在我的网站上创建了一个帐户并上传信息。Joe将插件安装在他自己的网站上,这将使他能够从自己的网站访问存储在我的网站上的数据 Joe网站的访问者可以将数据上传到我网站上Joe的帐户。Joe的网站将决定谁可以访问、谁可以修改以及谁可以将新信息上传到我网站中Joe的帐户 我想在我的网站上发布一个API,让Wordpress插件访问它。我知道Joe的网站将有一个api密钥,允

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

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

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

我想在我的网站上发布一个API,让Wordpress插件访问它。我知道Joe的网站将有一个api密钥,允许他的网站验证到我的网站。然而,什么会阻止其他人使用API密钥并假装是Joe的网站呢

我已经看到了类似的实现,当我在客户端检查代码时,我可以看到api密钥。什么会阻止我使用api密钥并假装是网站

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

我在这里看到了这个答案:

然而,当Joe的网站将密钥发布到我的网站上时,访问者难道不能看到密钥吗


谢谢。

API密钥将在其他网站的服务器端用于与您的网站通信, 这样客户就看不到了

API密钥不能从用户浏览器直接用于访问您的站点资源,因为它将被浏览器阻止,因为存在安全风险

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

如何实施:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
您应该有一个URL,可以处理其他站点更新用户配置文件的请求,例如:

www.yoursite.com/api/updateprofile
现在,您应该决定是否支持GET/POST请求提供的数据(或同时支持两者)

例如,如果您希望支持GET请求,请告诉其他站点,它们可以使用给定参数对上述Url执行操作: api密钥、用户id、名字(可选)、姓氏(可选)

他们网站中的使用示例:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
为了在您的站点上实现它,只需解析请求并尝试获取参数,同时验证API密钥

我认为PHP中的语法如下,尽管我不确定:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
更新2:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
下面是一个示意图来向您说明:

乔的用户浏览器乔的服务器--(API_键)--->您的站点API

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

API密钥将在其他网站的服务器端用于与您的网站通信, 这样客户就看不到了

API密钥不能从用户浏览器直接用于访问您的站点资源,因为它将被浏览器阻止,因为存在安全风险

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

如何实施:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
您应该有一个URL,可以处理其他站点更新用户配置文件的请求,例如:

www.yoursite.com/api/updateprofile
现在,您应该决定是否支持GET/POST请求提供的数据(或同时支持两者)

例如,如果您希望支持GET请求,请告诉其他站点,它们可以使用给定参数对上述Url执行操作: api密钥、用户id、名字(可选)、姓氏(可选)

他们网站中的使用示例:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
为了在您的站点上实现它,只需解析请求并尝试获取参数,同时验证API密钥

我认为PHP中的语法如下,尽管我不确定:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
更新2:

www.yoursite.com/api/updateprofile?api_key="key"&user_id=1&first_name="joe's new first name!"
var api_key = GET["api_key"];
var user_id = GET["user_id"];
下面是一个示意图来向您说明:

乔的用户浏览器乔的服务器--(API_键)--->您的站点API

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

这是有道理的。谢谢所以运行在Joe的网站上的Wordpress插件会有一个PHP脚本,当Joe的访问者在我的网站上发布他们想要加载到Joe帐户的信息时,他们不会直接发布到我的网站,而是会发布到Joe服务器上的PHP脚本,然后再发布到我的网站上?这就是我实施这项计划的方式吗?谢谢我已经更新了我的答案谢谢你更新了你的答案。然而,如果joe的访问者在joe的站点中检查页面,那么api键对他们来说不是可见的吗?或者你的意思是对我的网站的调用将通过joe网站中的php脚本完成,而不是通过浏览器?客户端只能看到joe网站发送给他的内容。他有html和javascript,但他没有看到他的服务器实现和代码。因此,他甚至不知道你的网站甚至存在和乔使用它。我在答案上加了一个图表来向你说明。这是有道理的。谢谢所以运行在Joe的网站上的Wordpress插件会有一个PHP脚本,当Joe的访问者在我的网站上发布他们想要加载到Joe帐户的信息时,他们不会直接发布到我的网站,而是会发布到Joe服务器上的PHP脚本,然后再发布到我的网站上?这就是我实施这项计划的方式吗?谢谢我已经更新了我的答案谢谢你更新了你的答案。然而,如果joe的访问者在joe的站点中检查页面,那么api键对他们来说不是可见的吗?或者你的意思是,对我的站点的调用将由我使用的php脚本完成