2013-02-16 12 views
5

Mam 4-5 aplikacji Android i chcę zaimplementować logowanie jednokierunkowe dla wszystkich tych aplikacji. Tak więc, jeśli użytkownik zalogował się do którejkolwiek z tych aplikacji, nie będzie proszony o ponowne zalogowanie się w innych aplikacjach. Jak mogę to zrobić w systemie Android?Implementacja logowania jednokrotnego dla aplikacji Android

+0

Użyj SharedPreference w wielu aplikacjach? http://stackoverflow.com/questions/6030321/android-retrieving-shared-preferences-of-other-application – rafid059

Odpowiedz

0

Wdrażanie jednokrotnego logowania wymaga posiadania wspólnej bazy danych przechowującej dane uwierzytelniające użytkownika. Jednym ze sposobów na to jest wdrożenie własnego serwera uwierzytelniającego, który ujawnia login, rejestrację, resetowanie i zapomnianych interfejsów API do hasła, które każda z Twoich aplikacji użyje do zalogowania się do aplikacji.

Powiedzmy, że używasz JWT do utrzymywania bezpaństwowości, co oznacza, że ​​serwer auth reaguje na JWT dla każdego udanego logowania za pośrednictwem dowolnej aplikacji dla systemu Android.

Tak więc aktywność uruchamiania w każdej aplikacji nie powinna być loginem, ale pulpitem lub tym, co zobaczy użytkownik po zalogowaniu. W polu on_create pulpitu sprawdź, czy w udostępnianych preferencjach jest dostępny jwt. Jeśli takowy istnieje, przejdź do pulpitu nawigacyjnego. Ale jeśli nie ma jednej, goto login i pozwól użytkownikowi zalogować się w pierwszej kolejności. Po zalogowaniu zachowaj jwt we wspólnych preferencjach dla innych aplikacji, aby z niego korzystać. Musisz upewnić się, że wszystkie wspólne preferencje używają tej samej przestrzeni nazw, aby uzyskać dostęp do jwt.

Aby zwiększyć efektywność, można zaimplementować moduł biblioteczny do logowania, regd i zapomniane hasło do każdej aplikacji i mieć tę część dla wszystkich aplikacji gotową. Pliki XML dla trzech działań mogą zostać włączone do samej biblioteki, a aplikacja załaduje je z pliku lib, jeśli nie znajdzie go w zestawach aplikacji.

Teraz wchodzimy do części serwerowej, wdrażając własny serwer uwierzytelniania, np. Używając OAuth2, jest jeden sposób, ale aby to ułatwić, istnieją inne rozwiązania takie jak Stormpath lub CAS, które świadczyłyby taką usługę. Być może znajdziesz taki, który też jest wolny.

Zamiast JWT można użyć identyfikatora użytkownika (klucz podstawowy w bazie danych użytkowników), aby określić, czy użytkownik jest zalogowany, czy nie.

Inną kwestią do rozważenia jest to, czy serwer aplikacji dla każdej z tych aplikacji, jeśli je posiada, korzysta z JWT lub identyfikatora użytkownika, aby odpowiadać na żądania aplikacji i na podstawie tego tokenu komunikacyjnego serwera uwierzytelniania należy zdecydować. Nie trzeba dodawać, że serwer aplikacji i serwer uwierzytelniający powinny również komunikować się między nimi, aby zsynchronizować informacje o użytkowniku dla aplikacji. Byłoby tak samo, nawet jeśli używasz serwera auth firmy zewnętrznej, który będzie rozmawiał z jedną bazą danych przechowującą wszystkie informacje o użytkowniku, ale być może będziesz musiał popracować nad synchronizacją serwera aplikacji z zewnętrznym serwerem uwierzytelniającym

Jednak trudna część jest w wylogowaniu i zresetować hasło i zmienić hasło. Nie mówię o procesie wylogowania, jeśli używany jest JWT, który ma własne wyzwania, ale mówię o wylogowaniu podczas używania SSO. Jeśli użytkownik wyloguje się z jednej z aplikacji, musisz zdecydować, czy użytkownik musi się wylogować z pozostałych aplikacji, czy nie. Oba można obsłużyć, ale zwykle byłby to pojedynczy znak dla łatwej implementacji i zapewniłby również dobry UX.

Ponadto, jeśli któraś z tych aplikacji ma wersję strony internetowej, a użytkownik zmienia lub resetuje hasło ze strony internetowej, należy się upewnić, że użytkownik loguje się ponownie na urządzeniu, gdy po raz pierwszy używa aplikacji po zmianie. Jednak ta logika musi być zarządzana całkowicie po stronie serwera wewnątrz serwera auth.

Chociaż Twoje pytanie dotyczy tylko aplikacji dla systemu Android, być może trzeba będzie zaimplementować serwer i zmodyfikować serwer aplikacji także dla każdej aplikacji. Może być szansa, że ​​nie jest to w pełni twoja sprawa, ale twoje rzeczywiste wymagania mogą mi pomóc w realizacji tego.

Powiązane problemy