Kontakt

Jedno konto do trzech aplikacji: wybór wspólnego logowania

Cel był prosty: jedno konto dla trzech aplikacji. Na stole miałem dwa warianty — docelowo idealny i realistyczny na wyznaczony czas. Wybrałem drugi, zachowując pierwszy jako możliwy kierunek rozwoju.

Cel
Ustalić, jak dojść do jednego konta i wspólnego logowania w trzech aplikacjach w wyznaczonym czasie.
Narzędzia

Przegląd istniejącego kodu i procesów · Keycloak jako wspólny system tożsamości · porównanie dwóch wariantów architektury

Proces
Potrzeba użytkownika → analiza istniejących procesów → wariant idealny i realistyczny → porównanie zakresu, migracji i zależności → wybór pierwszego etapu.
Efekt
Wybrany wariant realistyczny i uzgodniony zakres pierwszego etapu dla programisty. Osobna usługa kont pozostała możliwym kierunkiem dalszego rozwoju.
Dwa warianty wspólnego konta: idealny z nową usługą oraz wybrany realistyczny, wykorzystujący istniejącą aplikację
Porównanie wariantów na podstawie analizy. Do pierwszego etapu wybrany wariant realistyczny.

Jeden klucz, osobne zasady dostępu

Jedno konto do kilku aplikacji przypomina jeden klucz do różnych budynków. Korzystanie z niego ma być wygodne, ale każdy budynek zachowuje własne pomieszczenia i zasady wejścia. W aplikacjach wspólne potwierdzenie tożsamości też musi współistnieć z lokalnymi uprawnieniami i danymi.

Z perspektywy użytkownika potrzeba była konkretna: loguję się raz i przechodzę do kolejnej aplikacji bez ponownego wpisywania hasła, dopóki trwa wspólna sesja. To wspólne logowanie, czyli SSO — od angielskiego single sign-on. W obu rozważanych wariantach miało ono korzystać z Keycloak, systemu potwierdzającego tożsamość użytkownika i obsługującego sesję logowania. Wspólne logowanie nie zastępuje jednak zasad nadawania i odbierania dostępu, które opisuję też w materiale o onboardingu i offboardingu.

Zanim wybrałem rozwiązanie, sprawdziłem punkt wyjścia

Aplikacje już istniały. Miały rejestrację, aktywację kont, ustawianie pierwszego hasła, reset hasła, profile i panel administratora. Jedna z nich obsługiwała wspólne dane biznesowe, a aplikacja edukacyjna miała własne logowanie i własne dane produktowe.

Dlatego analiza objęła cały cykl życia konta. Trzeba było ustalić, które procesy zachować, które przenieść i jak powiązać użytkownika pomiędzy aplikacjami. Dopiero z tym obrazem na stole mogłem sensownie porównać dwa warianty.

Wariant idealny: osobna usługa kont

W rozwiązaniu docelowym powstałaby osobna usługa wspólnego konta. Zarządzałaby profilem, danymi kontaktowymi, zgodami i procesami konta dla wszystkich produktów. Keycloak nadal odpowiadałby za tożsamość, hasło i wspólną sesję. Każda aplikacja zachowałaby swoje dane oraz uprawnienia.

To dawało czytelny podział odpowiedzialności: wspólny profil nie należałby do żadnego z produktów. Kolejna aplikacja mogłaby dołączyć do neutralnej usługi kont. Wspólny panel profilu również miałby własne miejsce.

Tyle że oznaczało to zbudowanie i późniejsze utrzymywanie nowej usługi, przeniesienie danych oraz przebudowę rejestracji, aktywacji, obsługi haseł i panelu administratora. Dochodziły szersza migracja, więcej testów i plan wycofania zmian, gdyby wdrożenie poszło źle. To wszystko trzeba byłoby uwzględnić w czasie potrzebnym do uzyskania pierwszego efektu dla użytkownika.

Wariant realistyczny: wykorzystać istniejące procesy

W drugim wariancie wspólny profil pozostawał w aplikacji, która już nim zarządzała. Zachowywaliśmy jej rejestrację, aktywację, panel konta i istniejący sposób inicjowania resetu hasła. Keycloak miał zapewnić wspólną tożsamość i sesję logowania.

Aplikacja edukacyjna miała korzystać z tego samego logowania, bez utrzymywania osobnego hasła dla tych użytkowników. Lokalny profil byłby tworzony lub łączony przy pierwszym poprawnym wejściu. Jej organizacje, materiały, postęp i uprawnienia pozostawały na miejscu.

Zakres migracji i przebudowy był mniejszy. Był też konkretny kompromis: aplikacja historycznie odpowiedzialna za jeden produkt nadal miała obsługiwać wspólny profil. Kolejne produkty zależałyby od udostępnianych przez nią danych i zasad integracji.

Co faktycznie porównywałem

ObszarWariant idealnyWariant realistyczny
Wspólny profilOsobna usługa kontIstniejąca aplikacja
Rejestracja i aktywacjaPrzeniesione do centralnego procesuZachowane istniejące procesy
Panel kontaNowy, neutralny panelDotychczasowy panel
Migracja i testySzerszy zakres zmianOgraniczony zakres zmian
Praca przed pierwszym efektemWięcej budowania i przenoszeniaWięcej wykorzystania tego, co już działa
Koszt wyboruNowa usługa do utrzymaniaDalsza zależność od istniejącej aplikacji

Wybrałem zakres na wyznaczony czas

Do pierwszego etapu wybrałem wariant realistyczny. Priorytetem było jedno konto i przechodzenie między trzema aplikacjami bez kolejnego hasła. Ograniczenie zmian pozwalało skupić zaplanowaną pracę na tym celu.

Wariant idealny został punktem odniesienia dla dalszego rozwoju. Do osobnej usługi kont można wrócić, gdy przybędzie produktów, wspólnych procesów albo zależność od jednej aplikacji zacznie utrudniać kolejne zmiany. Taki krok wymagałby ponownej oceny podziału odpowiedzialności i migracji.

Co trafiło do pierwszego etapu

Zakres obejmował wspólne logowanie, trwałe powiązanie rekordów użytkownika oraz mapowanie istniejących ról. Lokalny profil aplikacji edukacyjnej miał powstawać przy pierwszym poprawnym logowaniu. Wydzielenie nowej usługi kont, dołączenie kolejnego produktu i płatne subskrypcje pozostały poza tym etapem.

Warunki odbioru opisywały zachowanie użytkownika: przejście z jednej aplikacji do drugiej, wejście z nowej karty, obsługę braku aktywnej sesji i powrót do właściwej strony po zalogowaniu. Szczegóły konfiguracji produkcyjnej wymagały jeszcze potwierdzenia przed wdrożeniem.

Efektem tej analizy był uzgodniony zakres dla programisty. Obok rozwiązania docelowego miałem wariant wybrany do realizacji w wyznaczonym czasie — wraz z jasno nazwanym kompromisem. W podobnym zadaniu warto zapisać właśnie te trzy rzeczy: co robimy teraz, co zostawiamy na później i jaką zależność świadomie zachowujemy.

Otwórz oryginalny obrazWróć do wpisów