如何在不公开 API 密钥的情况下发出 POST 请求?

Posted

技术标签:

【中文标题】如何在不公开 API 密钥的情况下发出 POST 请求?【英文标题】:How can I make POST requests without making my API key public? 【发布时间】:2012-06-05 07:39:54 【问题描述】:

使用 imageshack API 我可以将图像上传到 imageshack,但我必须使用 API 密钥才能做到这一点。我可以为将图像上传到 imageshack 创建一个 POST 表单,但必须将密钥放入表单中,并且公开公开 API 密钥。如何在不暴露 API 密钥的情况下将图像上传到 imageshack?

【问题讨论】:

您可以在发送请求之前要求用户登录。成功登录后,您会生成一个令牌(将其存储在数据库中)并随请求一起发送。在服务器端,如果令牌存在,则处理请求,如果不存在,则发送 json :error => "Invalid token" 我正在上传到 imageshack 而不是我的服务器。这就是麻烦所在。如果我要上传到我的服务器,我可以遵循你的技术。 【参考方案1】:

我认为正确执行此操作的唯一方法是用户首先将图像发布到您的 OWN 应用程序。

然后在您的应用中,您在内部将此 POST 重定向到 ImageShack,在那里您可以安全地使用您的 API 密钥,而无需任何人看到。

您可以使用RestClient 之类的简单方法从后端运行 POST 请求。您需要将图像临时存储在您的服务器上,无论是内存还是磁盘,以便重新传输到 ImageShack。

所以:

    用户通过 POST 将图像发送到您的服务器 您的服务器在用户的 POST 请求中接收到图像 您的服务器使用您的 API 密钥将此图像运行 POST 到 ImageShack 第1步的POST请求成功返回给用户

【讨论】:

是的,我知道通过分两步完成,我可以轻松完成;但我想要一个 1 步的方式来做到这一点。之前,我实现了一个 2 步方式,我只是想确保根本没有 1 步方式。 好的,我明白了。不,我不认为 ImageShack API 甚至打算用于单步过程。您将让用户的浏览器最终在 ImageShack 服务器上的一个奇怪的 API“页面”上结束,该页面只打算被后端用作 API。例如,像 PayPal 这样的东西使用加密的 POST 参数来实现类似 1-step 过程的东西,但 IS 似乎没有提供类似的接口。

以上是关于如何在不公开 API 密钥的情况下发出 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

在客户端上使用 SERVER_API 密钥是不是可以,是不是可以在不使用 SERVER_API 密钥的情况下向设备组发送 GCM 消息?

API 密钥是不是通过 get 请求公开?

ABAP RSA方式调用银行API

如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?

如何在不污染全局命名空间的情况下公开 javascript 对象以进行单元测试

如何在不使用 JQuery 的情况下使用 fetch API 以 JSON 格式发布表单数据?