我正在开发一个用户注册的简单iPhone应用程序,并使用他们的电子邮件/密码登录。这些值存储在远程数据库中。
我正在使用Cloudant存储此信息(CouchDB很棒),并且已授予新用户的只读权限(创建的API密钥/传递)。为了与Cloudant通信,您显然需要一个URL来访问它(例如https://user:pass@db.cloudant.com),它以字符串形式存储在应用程序中。
现在,虽然我知道这是非常不安全的,但为了保持db URL安全(特别是它的用户名/密码),我想不出任何其他选择。我见过人们谈论使用另一台服务器代理来获取凭据,但似乎有点尴尬。
任何帮助或想法都会非常感激!
答案 0 :(得分:1)
您是否尝试从iPhone应用程序直接连接到数据库?您不应该为您的应用程序提供对整个远程用户表/数据库的读访问权限。迟早有人会发现并且可以读取您的数据。无论您如何对其进行模糊处理,用户/密码组合都需要以某种方式存储在您的应用中。
您应该做的是构建一个连接到您的数据库并验证您的用户的Web服务。数据库密码保留在服务器上。这种代理方法并不尴尬,它是使数据库登录远离用户的唯一方法。
答案 1 :(得分:1)
一种选择是在云中创建自己的服务,从而抽象出您的存储。这样做的好处是可以让您在不更新所有设备的情况下更改存储空间。
在该模型中,服务存储用于访问存储的凭据,并在应用程序层中实现用户安全性。我也不会将它视为代理层 - 这意味着它是一个很薄的传递。如果您开发服务,则应定义与存储无关的Web界面(rest,soap)。在这种情况下,它是一种服务,而不是代理。
修改强>
通常,Web服务对用户进行身份验证(不要编写自己的用户)。使用SSL的基本身份验证是典型的。然后,在该服务上下文API中,您可以访问用户名。从那里,你做你需要的。您可以使用一个对所有内容具有完全访问权限的存储帐户访问您的存储空间。
另一个身份验证选项是OAuth,它允许他们通过谷歌等人进行身份验证 - 您永远不会获得密码 - 只需谷歌提供的令牌即可让您知道他们经过身份验证,而且他们就是他们声称的身份。例如,这就是堆栈溢出的工作原理。