2010-02-13 50 views
3

我如何确保只有我的iPhone应用被允许使用我的应用引擎应用发送和接收数据?我可能不得不使用密钥,但我不知道如何。我可以使用post/get通过https发送静态密钥吗?或者我需要使用一些动态密钥算法?iPhone访问应用引擎密钥

任何帮助,将不胜感激! Bjorn

回答

2

假设你认为你可以保持iPhone应用程序的秘密被发现,你需要的是一个HMAC。对于您所做的每个请求,请将该请求的文本传递给像HMAC-SHA1这样的函数,并将您的密钥作为密钥,并将结果添加到您的请求中。当服务器收到请求时,执行相同的操作,并验证HMAC是否匹配。

+0

这也给你一个安全问题。如果有人拦截HMAC并恶意使用它将数据完全相同的数据发布到您的服务数百次,那么复制您的数据会怎样? – Rippo 2010-02-16 08:22:44

+0

然后你有一个问题 - 你有任何其他方案完全相同的问题。因此,我的开篇评论“假设你认为你可以保持iPhone应用程序的秘密被发现......”。 – 2010-02-16 10:43:58

+0

对不起,我第一次误读你的评论。你是对的 - 你需要包含一个随机数和/或时间戳来防止重放攻击。当然,这可能不是问题,取决于他的威胁模型。 – 2010-02-17 08:37:24

0

我不完全确定你想要完成什么。

但是,在iPhone应用程序中共享秘密或API密钥通常是一个糟糕的主意。

您正在讨论您自己的AppEngine应用程序。你为什么不在AppEngine一侧创建一个简单的(基于JSON的)Web服务来与你的应用程序通信?我怀疑是否有任何需要从您的iPhone应用程序直接使用您的AppEngine凭据。

如果这不能解决您的问题,请提供更多详细信息。

+0

我有一个API的Web服务,但我只想让我的iPhone应用程序与它交谈。在目前情况下,API可供全世界使用,所以任何人都可以向其发送不良数据,并且我的数据库将充满我不想拥有的数据。 – Bjorn 2010-02-13 15:10:35

0

在您的Web服务上使用SSL证书,因为传递给它的任何数据都已加密。

加密的SSL连接需要 客户 和服务器之间发送的所有信息由 发送软件进行加密和解密由 接收软件,通过互联网 保护私人 信息被截取。

此外,每次调用服务时都会发送一个您已经与数据一起定义的GUID。在Web服务执行任何操作之前,必须验证此GUID。要进一步锁定,可以创建一个服务,该服务生成一个guid,以便为任何后续呼叫服务进行备份。

此外,请确保您不允许任何人在服务器上看到您的wsdl,否则他们可以猜出您的参数。

来自RapidSSL的SSL ceritifcate每年花费17美元,所以成本无需担心。

+1

这没有帮助 - SSL证书验证服务的身份,而不是客户端。他可以嵌入客户端证书,但App Engine无法验证客户端证书。 – 2010-02-13 17:03:15

+0

您是否阅读了我的文章? SSL只是阻止人们窥探你在客户端和服务器之间实际发送的内容。通过指导似乎是一个好方法。 – Rippo 2010-02-13 20:44:58