0

我正在开发一个简单的 iPhone 应用程序,用户可以在其中注册并使用他们的电子邮件/密码登录。这些值存储在远程数据库中。

我正在使用 Cloudant 来存储这些信息(CouchDB 很棒),并已授予新用户只读权限(创建的 API 密钥/通行证)。为了与 Cloudant 通信,您显然需要一个 URL 来访问它(例如https://user:pass@db.cloudant.com),该 URL 作为字符串存储在应用程序中。

现在,虽然我知道这很不安全,但我想不出任何其他替代方案来保证 db URL 的安全(特别是它的用户名/密码)。我见过人们谈论使用另一台服务器进行代理以获取凭据,但这似乎有点尴尬。

任何帮助或想法将不胜感激!

4

2 回答 2

1

您是否尝试从您的 iPhone 应用程序直接连接到数据库?您不应该授予您的应用程序对整个远程用户表/数据库的读取权限。迟早有人会发现并拥有对您数据的读取权限。无论您如何尝试混淆它,用户/密码组合都需要以某种方式存储在您的应用程序中。

您应该做的是构建一个连接到您的数据库并验证您的用户的 Web 服务。数据库密码保留在服务器上。这种代理方法并不尴尬,它是使您的数据库登录远离您的用户的唯一方法。

于 2012-01-06T23:51:56.533 回答
1

一种选择是在云中创建您自己的服务,以抽象出您的存储。这还具有允许您在不更新所有设备的情况下更改存储的好处。

在该模型中,服务存储凭据以访问存储,并且您在应用程序层中实现用户安全。我也不认为它是一个代理层——这意味着它是一个很薄的通道。如果您开发一项服务,您应该定义一个与存储无关的 Web 界面(rest、soap)。在这种情况下,它是一项服务,而不是代理。

编辑:

通常,Web 服务对用户进行身份验证(不要自己编写)。使用 SSL 的基本身份验证是典型的。然后,在该服务上下文 API 中,您可以访问用户名。从那里,你做你需要的。使用对所有内容具有完全访问权限的一个存储帐户访问您的存储。

另一个身份验证选项是 OAuth,它允许他们向像谷歌这样的人进行身份验证 - 你永远不会得到密码 - 只是一个来自谷歌的令牌,让你知道他们已经过身份验证并且他们就是他们声称的身份。例如,这就是堆栈溢出的工作方式。

于 2012-01-06T23:52:38.000 回答