2013-02-16 48 views
5

我有4-5個Android應用程序,我希望爲所有這些應用程序實現單點登錄。因此,如果用戶已經登錄到任何一個應用程序,他將不會被要求再次登錄其他應用程序。我怎樣才能在Android中實現它?爲Android應用程序實現單點登錄

+0

跨多個應用程序使用SharedPreference? http://stackoverflow.com/questions/6030321/android-retrieving-shared-preferences-of-other-application – rafid059 2016-11-10 19:46:01

回答

0

實施SSO需要擁有一個保存用戶憑證信息的公用數據庫。這樣做的一種方法是實現您自己的身份驗證服務器,該服務器會公開登錄,註冊,重置和忘記每個應用程序用於登錄應用程序的密碼API。

比方說,你正在使用JWT保持無國籍,這意味着auth服務器與JWT響應通過任何Android應用程序每次成功登錄。

因此,您的每個應用程序中的啓動器活動不應該是登錄,而應該是儀表板或用戶在登錄後看到的任何內容。在儀表板的on_create中,檢查共享首選項中是否存在可用的jwt。如果有,請繼續操作儀表板。但是,如果沒有,則登錄活動並讓用戶首先登錄。登錄後,將jwt保存在共享首選項中以供其他應用程序使用。您需要確保所有共享首選項都使用相同的名稱空間來訪問jwt。

爲了使其更加有效,可以實現對登錄,REGD庫模塊和忘記密碼被納入每個應用程序,你會擁有一切準備就緒的應用程序的一部分。三個活動的XML文件可以包含在lib本身中,如果應用程序不能在應用程序中找到它,應用程序將從lib文件加載它們。

現在來服務器部分,實現您的自定義auth服務器,用說的OAuth2是一種方式,但更容易,有喜歡Stormpath或CAS的第三方解決方案這將提供這樣的服務。也許你可以找到一個免費的。

相反JWT的,你可以使用用戶ID(用戶數據庫主鍵),以確定如果用戶登錄或沒有。

需要考慮的另一點是,如果每個應用程序的應用程序服務器(如果有的話)都使用JWT或userId來響應應用程序請求,並且應根據該auth服務器通信令牌來決定。不用說,應用程序服務器和auth服務器也應該在它們之間進行通信以同步應用程序的用戶信息。即使您使用的第三方auth服務器會與保存整個用戶信息的單個數據庫進行通信,但您可能需要努力將應用程序服務器與第三方auth服務器同步,這也是一樣的。

但是,棘手的部分是在註銷並重置密碼並更改密碼。如果使用智威湯遜,我不會談論註銷過程,這有其自身的挑戰,但我在談論使用SSO時的註銷。如果用戶從其中一個應用程序註銷,則需要確定用戶是否必須從其他應用程序註銷。兩者都可以被處理,但通常它會是一個易於實現的單一標誌,它也會提供一個好的UX。此外,如果這些應用程序中的任何一個具有網站版本,並且用戶從網站更改或重置密碼,則需要確保用戶在更改後第一次使用該應用程序時再次登錄設備。然而,這個邏輯必須完全在auth服務器內的服務器端進行管理。

儘管您的問題僅與android應用有關,但您可能必須爲此實現一個服務器並針對每個應用修改appl服務器。這可能有可能完全不是你的問題本質,但你的實際需求可能會幫助我實現這一點。