的計劃:爲Android應用程序登錄系統
我開發在很大程度上數據庫驅動的Android應用程序(如中,大部分的內容通過一個RESTful服務層是從MySQL數據庫中提取我的網絡服務器)。
在可以對API請求數據進行任何調用之前,用戶必須通過將憑據傳遞給數據庫進行身份驗證來進行身份驗證。如果用戶被驗證,我會傳回授權令牌。如果用戶選擇了「記住我」選項,該令牌將被保存在本地以供將來使用。
所有將來的API調用都需要包含此授權令牌。
當用戶希望註銷時,會將呼叫發送回API以從數據庫中刪除該令牌,從而使其無效以供將來使用。令牌的本地副本也會被刪除。
的問題
如果用戶不註銷,並直接關閉應用程序(家庭或後退按鈕),並沒有足夠的「記住我」選項選中,我想銷燬服務器上的令牌。如何才能做到這一點?
可能的解決方案#1
- 如果有
onExit
事件觸發應用程序退出時,請對API讓它知道摧毀令牌的呼叫。 用這種方法
的問題是:
- 請問這種情況存在,這是保證在所有 條件來提高(home鍵,返回鍵,程序崩潰(我能活 沒有這個))?
可能的解決方案#2
- 維護數據庫中的一個
time of last activity
列。如果自上次活動後致電x min
,該令牌將被視爲過期。
使用這種方法的問題是:在每個API調用更新數據庫中的時間列的
額外開銷。
此外,我現在必須存儲在數據庫中,如果用戶選擇要記住,因爲在那種情況下令牌不能過期。
你會實行這兩種解決方案?還是有另一種更好的方式來實現這種機制?
如果您建議#1,請告訴我哪個事件會符合我的目的。
當用戶沒有選擇「記住我」選項時,爲什麼要在服務器上保存授權令牌?您的授權請求可能包含1)憑證2)「記住我」選項。只有在選擇選項時才記住標記。 – Flavio
我一直在想,一旦我收到了證書並驗證了用戶,發出令牌就不需要每次進行API調用時都要將用戶名和密碼傳遞給服務器,從而使其更安全。令牌將是臨時的,而密碼更持久。此外,擁有令牌可以讓用戶遠程登出任何設備。 (訪問朋友的電話,忘記註銷) – xbonez