2008-12-09 40 views
8

我正在構建一個與Ruby on Rails後端對話的iPhone應用程序。 Ruby on Rails應用程序也將爲Web用戶提供服務。 restful_authentication插件是提供快速和可定製用戶身份驗證的絕佳方式。但是,我希望iPhone應用程序的用戶擁有通過存儲在新列中的電話唯一標識符([[UIDevice device] uniqueIdentifier])自動創建的帳戶。稍後,當用戶準備創建用戶名/密碼時,該帳戶將更新爲包含用戶名和密碼,並保持iPhone唯一標識符不變。用戶在設置好用戶名/密碼之後才能訪問該網站。但是,他們可以使用iPhone應用程序,因爲應用程序可以使用它的標識符對自身進行身份驗證。擴展restful_authentication/AuthLogic以支持匿名iPhone的懶惰登錄的最佳方式是什麼?

修改restful_authentication來做到這一點的最佳方法是什麼?創建一個插件?或修改生成的代碼?

怎麼樣的替代框架,如AuthLogic。允許iPhone將生成的授權令牌鎖定到其UUID的最佳方式是什麼?但是,稍後讓用戶創建用戶名/密碼?

+0

不是一個真正的答案,而是更多的想法:您的設計如何處理某人擁有iphone賬戶,獨立註冊用戶/密碼賬戶的情況,然後想要合併這兩個賬戶? – Stobor 2009-10-05 22:18:43

+0

我對這個問題做了一些進一步的思考,雖然我還沒有想出一個滿足我的解決方案,但我嘗試了一些東西。 使用鏈接到Device對象的隨機用戶名/密碼創建匿名帳戶可能會有所作用。但是,這需要設備在創建時獲取用戶名/密碼並進行存儲。這個解決方案的問題是,該網站然後是匿名帳戶貢獻散佈(可以通過在用戶名爲匿名帳戶類型字段,然後您可以過濾掉,如果需要很容易解決)。這個解決方案有效,但不是很好。 – 2010-01-09 23:10:44

回答

6

我認爲你不應該單獨使用手機標識符進行身份驗證,因爲它不是一個祕密,它可能也是可以猜測/可預測的。不要忘記,如果有人想破解你的網絡應用程序,他們不必使用你的代碼 - 他們可以猜測設備ID,並嘗試使用任何Web客戶端混淆用戶數據。

您應該將設備ID視爲與用戶名相似 - 它用於識別而不是驗證。我建議你讓用戶選擇一個密碼,或者甚至更好地自動生成一個隨機代碼,然後發送它 - 然後發送設備ID +此密碼/代碼先註冊設備,然後再驗證設備。

你也可以打賭,一些用戶將有多個設備 - 或者他們最終將取代一個設備,或者你會得到像Stephen Fry這樣的人使用4個IPHONE。爲了解決這個問題,我建議你尋找一種實例化restful_authentication兩次的方法,一次用於驗證用戶,第二次驗證設備。我沒有使用這個插件,但我希望你只需要使用不同的表參數來實現這一點。然後,在您的應用程序邏輯中,允許用戶將多個設備與其帳戶相關聯。

要安全地做到這一點,要麼從設備上做到這一點,要麼讓設備顯示一個隨機代碼,然後他們進入網絡應用程序來證明他們擁有該設備(這聽起來更加痛苦 - 它是相同的蘋果在iTunes,蘋果電視和遠程應用程序中使用的過程 - 看看它們是如何做到的 - 所以用戶不會感到驚訝)。 (也請確保在生成隨機密碼時,您使用加密隨機數生成器作爲基礎 - 可能有iPhone API用於此目的 - 否則您的密碼可能是可預測的)。

0

您是否嘗試過使用另一個認證方案,如Authlogic?我發現restful_authentication相當侵擾性(雖然我使用bort作弊)。

+0

是的,restful_authentication看起來相當侵擾性。我會看看Authlogic,不過,我已經通過直接修改restful_authentication提出了一個臨時替代方案(但是這不會對其進行未來證明升級)。 – 2008-12-28 05:03:10

0

產生Rails的隨機密碼 link text 我使用Restful_authentication插件我的項目之一。 作爲我的用戶創建工作流程的一部分,系統應該爲新用戶生成隨機密碼。

0

您對使用UDID和使用UDID生成的隨機密碼以及全站定義的鹽有什麼看法?

喜歡的東西:

salt = 'afG553Dvbf3' 

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

併發送密碼到iPhone它所連接的下一次。

相關問題