2012-01-21 54 views
9

我對在移動應用程序中執行用戶身份驗證的最佳方式感興趣。目前的設置很簡單。我在應用程序上存儲用戶名和密碼,並在每次需要運行受限查詢時將其發送到API。如何將用戶身份驗證放入移動應用程序

我覺得這可能是錯誤的做法。

當用戶登錄並存儲該用戶的ID時,是否需要更好地發送用戶名和密碼?這個問題是,然後API接受用戶名,而不是用戶名和密碼。用戶標識將更容易「猜測」,惡意人員可以通過隨機選擇的用戶標識在其帳戶下執行操作向api提交請求。我有一個API鍵。這足夠安全嗎?

問題是我想開始將twitter和facebook oauth集成到應用程序中。我沒有多讀這些,但我想你會得到一個「令牌」。這將如何與你建議的設置一起工作?在我自己的用戶數據庫中創建令牌並使用該令牌(無論是我的,Facebook還是Twitter的)作爲授權會有好處嗎?或者將每個服務分開並分別處理它們是否有意義?

謝謝。

回答

8

當用戶登錄並在登錄回覆中發送此令牌時,正確的方法是在服務器上生成授權令牌。然後在後續的請求中使用該令牌。

這意味着服務器必須跟蹤它生成的auth令牌。您還可以跟蹤令牌創建時間並使令牌在一段時間後過期。

令牌必須是一個足夠長的隨機字符串,以便它不容易被猜出。如何做到這一點曾被回答:How to generate a random alpha-numeric string?

我個人更喜歡UUID方法。

更新:

這個問題已經解決了在網絡瀏覽器,通過cookie和session。 (儘管有些REST純粹主義者反駁這種方法)可以重新使用自己的Android請求這種機制:

  1. 啓用服務器會話。

  2. 當用戶登錄到服務器中添加一些數據會話,對於登錄的實例時:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis()); 
    
  3. 由於會話是啓用的,你還需要啓用支持Cookies您HttpClient的請求:Using Cookies across Activities when using HttpClient

  4. 每次發出請求時,服務器應檢查會話是否包含timeOfLogin屬性。否則,它應該返回HTTP 401回覆。

  5. 當用戶註銷時,調用服務器註銷url並清除客戶端上的cookie。

+0

好的,所以生成一個令牌是要走的路。邪惡! :) 謝謝 –

相關問題