4

我有一个 iPhone 应用程序在服务器上使用我的 php api,但如果有人知道 url,它当前是打开的。我想确保没有人可以使用这个 API,直到我准备好让它成为一个公共 api(如果我什至这样做的话)

我读过这篇文章,但我不确定他们说的是什么意思:

[客户] 在进行 REST API 调用之前,将一堆唯一数据组合在一起(这通常是您打算发送的所有参数和值,它是 AWS 网站上代码片段中的“数据”参数)

我不明白如果我用我的 api 秘密散列我计划发送的参数,如果我发送未加密的参数/值,这比仅仅散列 api 秘密更安全。

4

3 回答 3

5

HTTPS API 并使用 API 密钥。然后您会知道只有拥有密钥的人(在本例中为您)才能访问 API。

你说得对,它并不更安全。这就是为什么我建议您使用 SSL 连接。除非您计划对来回传输的所有内容进行加密。

公钥/私钥方案也可以很好地工作。HTTPS 需要很少的努力

于 2012-07-05T19:19:31.683 回答
2

数字签名提供了一种验证通过不安全连接发送的消息的方法。

设置:每个客户端都有自己的私钥公钥(客户端只需要保存私钥)。服务器将存储每个客户端的公钥。公钥对所有人都是可见的,并且可以被服务器用来识别客户端。只有客户端知道的私钥,它永远不会向任何人显示。

客户端对请求进行签名:连同其余的请求数据,客户端将对组合的请求数据进行哈希处理,并使用私钥对哈希进行加密。服务器将以相同的方式生成哈希(将签名排除在哈希计算之外),然后使用公钥解密签名。如果哈希匹配,则请求是真实的。

请注意,HTTPS 允许客户端证书,因此您可以利用现有工具来完成上述所有操作,而无需编写一行服务器端代码(您只需配置您的 Web 服务器;唯一的技巧是确保仅服务器接受它已经拥有的证书)。此外,客户端代码的数量应该是最少的:除了设置连接以使用客户端证书之外,您不需要做更多的事情。由于您正在控制客户端,因此您可以使用自签名证书并将服务器添加为证书颁发机构。关于在 iPhone 应用程序中使用客户端证书有很多关于 SO 的问题;您可以从阅读它们开始。

Note also that any scheme to protect the web API only works so long as copies of the app are in trusted hands. Should anyone untrustworthy get ahold of it, they can use the app or extract any secret data used by the app and access the API as they will.

于 2012-07-05T19:26:37.400 回答
0

出于开发目的,您可以只使用您的 Web 服务器设置来仅允许来自您的 IP 的请求。

于 2012-07-05T19:18:37.003 回答