我有一个网络应用程序,我正在构建一个Drupal模块,允许我的客户访问我的应用程序上的某些数据。
我打算将秘密API密钥分发给需要在Drupal模块副本中输入该值的客户。然后,这个Drupal模块会与我的Web应用程序进行通信,但我需要确保POST请求确实来自该源。
如何使用这个'密钥'传递一些信息,当我的应用程序收到它时,它知道:
(a) its from that client's server.
(b) it hasnt been eavesdropped on / copied and used by someone else?
我是否应该使用此API密钥作为密码来加密与POST请求的其余部分匹配的某些数据?收到它时,我使用我的API密钥副本解密它,如果匹配其余数据,我认为它已经过验证?
是否有框架工作为我做这个? Zend中的东西?
答案 0 :(得分:4)
使用HTTPS并在请求中发送API密钥。就这么简单。
如果您使用HTTP,那么您将重新发明轮子。
这是阅读评论后的更新,因为在问题中你没有解释你想要给网站的访问者提供API密钥(在这种情况下,无论你做什么,你都会被搞砸)。 / p>
juanpaco的评论解释了该怎么做(以及我最初假设你正在做的事情),但我会尝试更详细地解释它。
最重要的是您不在网络表单中使用API密钥。 API密钥仅用于客户服务器与API服务器之间的通信。
这是一个简化的解释:
您的API密钥从未以明文发送,从未向网站访问者发送。
这是使用API密钥的唯一合理方式,在我第一次阅读您的问题后,我认为您担心在服务器和客户服务器之间发送API密钥的安全性。
如果您的客户要将他们的密钥交给他们网站的每个访问者,那么这些访问者将始终能够了解他们,无论您尝试多么努力。为访问者提供API密钥并使其可以使用但无法阅读是不可能的。不难 - 不可能。无论使用什么协议,加密或任何您使用的。
(感谢juanpaco将这个旧答案引起我的注意。)