我正在构建一个与 Ruby on Rails 后端对话的 iPhone 应用程序。 Ruby on Rails 应用程序还将为 Web 用户提供服务。 restful_authentication 插件是提供快速和可定制的用户身份验证的绝佳方式。但是,我希望 iPhone 应用程序的用户在新列中存储一个由手机的唯一标识符 ([[UIDevice device] uniqueIdentifier]) 自动创建的帐户。稍后,当用户准备好创建用户名/密码时,帐户将更新为包含用户名和密码,iPhone 唯一标识符保持不变。用户在设置用户名/密码之前不能访问该网站。然而,他们可以使用 iPhone 应用程序,因为该应用程序可以使用它的标识符对自己进行身份验证。
修改 restful_authentication 以执行此操作的最佳方法是什么?创建插件?还是修改生成的代码?
其他框架怎么样,例如 AuthLogic。让 iPhone 将生成的身份验证 token 锁定到其 UUID,然后让用户稍后创建用户名/密码的最佳方法是什么?
最佳答案
我认为您不应该单独使用手机标识符进行身份验证,因为它不是 secret ,而且可能也是可猜测/可预测的。不要忘记,如果有人想破解您的网络应用程序,他们不必使用您的代码 - 他们只需猜测设备 ID 并尝试使用任何网络客户端篡改您的用户数据。
您应该将设备 ID 视为类似于用户名 - 它用于识别而非身份验证。我建议您让用户选择一个密码,或者更好地自动生成一个随机代码,以配合它 - 然后发送设备 ID +此密码/代码首先注册设备,然后对设备进行身份验证。
您还可以打赌,某些用户将拥有不止一台设备 - 或者他们最终会更换一台,或者您会遇到像 Stephen Fry 这样使用 4 部 iPhone 的人。为了解决这个问题,我建议你寻找一种方法来实例化 restful_authentication 两次,一次用于验证用户,第二次用于验证设备。我没有使用过这个插件,但我希望你只需要使用不同的表参数来实现这一点。然后在您的应用程序逻辑中允许用户将多个设备与其帐户相关联。
要安全地做到这一点,要么从设备上执行此操作,要么让设备显示一个随机代码,然后他们将其输入网络应用程序以证明他们拥有该设备(这听起来比实际更痛苦 - 这是相同的过程苹果在 iTunes、Apple TV 和远程应用程序中使用的 - 看看他们是如何做到的 - 所以这对用户来说不会那么令人惊讶)。
(还要确保在生成任何随 secret 码时,您使用加密随机数生成器作为基础 - 可能有一个 iPhone API 用于此 - 否则您的密码可能是可预测的)。
关于iphone - 扩展 restful_authentication/AuthLogic 以支持匿名 iPhone 的延迟登录的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351627/