扩展restful_authentication / AuthLogic以支持匿名iPhone的懒惰登录的最佳方法是什么?

时间:2008-12-09 02:38:04

标签: iphone ruby-on-rails ruby restful-authentication

我正在构建一个与Ruby on Rails后端对话的iPhone应用程序。 Ruby on Rails应用程序还将为Web用户提供服务。 restful_authentication插件是提供快速和可自定义的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户拥有一个帐户,该帐户由存储在新列中的电话的唯一标识符([[UIDevice device] uniqueIdentifier])自动创建。之后,当用户准备创建用户名/密码时,帐户将更新为包含用户名和密码,保留iPhone唯一标识符。用户在设置用户名/密码之前不应该访问该网站。但是,他们可以使用iPhone应用程序,因为应用程序可以使用它的标识符进行身份验证。

修改restful_authentication以执行此操作的最佳方法是什么?创建一个插件?或者修改生成的代码?

如何替代其他框架,例如AuthLogic。允许iPhone将生成的身份验证令牌锁定到其UUID的最佳方法是什么,但是让用户稍后创建用户名/密码?

4 个答案:

答案 0 :(得分:6)

我认为您不应该单独使用电话标识符进行身份验证,因为它不是一个秘密,它可能也是可猜测/可预测的。不要忘记,如果有人想要破解您的网络应用程序,他们不必使用您的代码 - 他们可以猜测设备ID并尝试使用任何Web客户端来处理您的用户数据。

您应该将设备ID视为类似于用户名 - 它用于识别而不是身份验证。我建议你让用户选择一个密码,或者更好地自动生成一个随机代码,然后再使用它 - 然后发送设备ID +这个密码/代码首先注册设备,然后再对设备进行身份验证。

你还可以打赌,一些用户将拥有多个设备 - 或者他们最终将取代一个设备,或者你会得到像Stephen Fry那样的4个iphone。为了解决这个问题,我建议您寻找一种方法来实例化restful_authentication两次,一次用于验证用户,另一次用于验证设备。我没有使用过这个插件,但我希望你只需要使用不同的表参数来实现这一点。然后在您的应用程序逻辑中允许用户将多个设备与其帐户相关联。

要安全地执行此操作要么从设备执行,要么让设备显示随机代码,然后他们进入Web应用程序以证明他们拥有设备(这听起来比实际上更痛苦 - 这是相同的过程苹果在iTunes,苹果电视和远程应用程序中的使用 - 看看他们是如何做到的 - 所以用户不会感到意外。)

(同时确保在生成任何随机密码时使用加密随机数生成器作为基础 - 可能有一个iPhone API - 否则您的密码可能是可预测的。)

答案 1 :(得分:0)

您是否尝试使用其他身份验证方案,例如Authlogic?我发现restful_authentication相当干扰(虽然我使用bort作弊)。

答案 2 :(得分:0)

在Rails中生成随机密码 link text 我正在为我的一个项目使用Restful_authentication插件。 作为用户创建工作流程的一部分,系统应为新用户生成随机密码。

答案 3 :(得分:0)

您如何看待使用UDID和使用UDID +全站定义盐生成的随机密码?

类似的东西:

salt = 'afG553Dvbf3'

udid = '1234567890'
pass = Digest::MD5.hexdigest(udid + salt)

并在下次连接时将密码发送到iPhone。