我正在构建一个与Ruby on Rails后端对话的iPhone应用程序。 Ruby on Rails应用程序还将为Web用户提供服务。 restful_authentication插件是提供快速和可自定义的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户拥有一个帐户,该帐户由存储在新列中的电话的唯一标识符([[UIDevice device] uniqueIdentifier])自动创建。之后,当用户准备创建用户名/密码时,帐户将更新为包含用户名和密码,保留iPhone唯一标识符。用户在设置用户名/密码之前不应该访问该网站。但是,他们可以使用iPhone应用程序,因为应用程序可以使用它的标识符进行身份验证。
修改restful_authentication以执行此操作的最佳方法是什么?创建一个插件?或者修改生成的代码?
如何替代其他框架,例如AuthLogic。允许iPhone将生成的身份验证令牌锁定到其UUID的最佳方法是什么,但是让用户稍后创建用户名/密码?
答案 0 :(得分:6)
我认为您不应该单独使用电话标识符进行身份验证,因为它不是一个秘密,它可能也是可猜测/可预测的。不要忘记,如果有人想要破解您的网络应用程序,他们不必使用您的代码 - 他们可以猜测设备ID并尝试使用任何Web客户端来处理您的用户数据。
您应该将设备ID视为类似于用户名 - 它用于识别而不是身份验证。我建议你让用户选择一个密码,或者更好地自动生成一个随机代码,然后再使用它 - 然后发送设备ID +这个密码/代码首先注册设备,然后再对设备进行身份验证。
你还可以打赌,一些用户将拥有多个设备 - 或者他们最终将取代一个设备,或者你会得到像Stephen Fry那样的4个iphone。为了解决这个问题,我建议您寻找一种方法来实例化restful_authentication两次,一次用于验证用户,另一次用于验证设备。我没有使用过这个插件,但我希望你只需要使用不同的表参数来实现这一点。然后在您的应用程序逻辑中允许用户将多个设备与其帐户相关联。
要安全地执行此操作要么从设备执行,要么让设备显示随机代码,然后他们进入Web应用程序以证明他们拥有设备(这听起来比实际上更痛苦 - 这是相同的过程苹果在iTunes,苹果电视和远程应用程序中的使用 - 看看他们是如何做到的 - 所以用户不会感到意外。)
(同时确保在生成任何随机密码时使用加密随机数生成器作为基础 - 可能有一个iPhone API - 否则您的密码可能是可预测的。)
答案 1 :(得分:0)
答案 2 :(得分:0)
在Rails中生成随机密码 link text 我正在为我的一个项目使用Restful_authentication插件。 作为用户创建工作流程的一部分,系统应为新用户生成随机密码。
答案 3 :(得分:0)
您如何看待使用UDID和使用UDID +全站定义盐生成的随机密码?
类似的东西:
salt = 'afG553Dvbf3'
udid = '1234567890'
pass = Digest::MD5.hexdigest(udid + salt)
并在下次连接时将密码发送到iPhone。