Obecnie mam 15-letnią starszą monolityczną aplikację internetową z blisko milionem użytkowników, korzystającą z domowego systemu autoryzacji i uwierzytelniania: JAAS, nazwy użytkowników i sklep pwds w DB z podstawowym hashowaniem hasła, niektóre osobiste pytania weryfikacyjne 2FA (z różnymi algorytmy mieszające itp.).
W ciągu najbliższych 12–18 miesięcy będę remontował aplikację, przede wszystkim koncentrując się na interfejsie użytkownika, ale również powoli aktualizowałem podstawowe części (aktualizację do Spring, Spring Security itp.). W ramach tego projektu postanowiliśmy zająć się aktualizacją interfejsu użytkownika na zasadzie moduł po module; udostępnianie każdego modułu po jego ukończeniu; idealna okazja do rozbicia monolitu na poszczególne aplikacje internetowe (wszystkie zachowujące ten sam wygląd UX).
Utknąłem przy próbie zaplanowania tego na poziomie uwierzytelniania i autoryzacji. Potrzebuję przekrojowego rozwiązania, które obejmie wszystkie moduły, więc gdy użytkownik zostanie przekierowany z jednej aplikacji do drugiej, będzie to płynne przejście - nawet nie będzie wiedział, że jest na różnych aplikacjach. OAuth2 brzmi jak idealne rozwiązanie.
Utknąłem, próbując zrozumieć, jak to zintegrować. Czy muszę zbudować własny niestandardowy serwer OAuth2? To uderza mnie jak okropny pomysł. Ale jak mam:
- migruj wszystkie moje konta użytkowników i proces autoryzacji na zewnętrzny serwer OAuth2
- dostosuj wygląd i działanie do reszty mojej aplikacji (nie jestem pewien, jak łatwo / prawdopodobnie będzie to możliwe)
- zapobiec typowemu wyskakującemu okienku „Aplikacja XYZ chce mieć uprawnienia dostępu do konta ...” podczas łączenia przez serwer zewnętrzny? (np. Google OpenID, Facebook itp.).
Moim celem jest zapewnienie płynnego przejścia użytkownika z bieżącego stanu do nowego, ale zapewnienie możliwości tworzenia osobnych aplikacji internetowych, które wszystkie uwierzytelniają się i autoryzują poza aplikacją internetową.
źródło
Odpowiedzi:
Ujawnienie : Jestem inżynierem w Auth0 .
To zależy od jednego ważnego punktu ... musisz zdecydować, czy:
Obie opcje są doskonale wykonalne z punktu widzenia wymagań funkcjonalnych. Dzięki niestandardowemu programowaniu masz pełną kontrolę nad funkcjami, które zdecydujesz się wesprzeć, więc w części odpowiedzi skupię się na tym, jak Auth0 może odpowiedzieć na wymienione wymagania .
Jednak zanim przejdziesz do tego, bez względu na decyzję, w celu uwierzytelnienia powinieneś skupić się na OpenID Connect zamiast OAuth2. To drugie będzie bardziej odpowiednie, jeśli planujesz mieć również API w miksie, a nie tylko podzielić monolit na osobne aplikacje internetowe.
Jak migrować istniejących użytkowników do systemu opartego na Auth0?
Możesz albo nadal korzystać z bazy danych i polegać na Auth0, aby zapewnić pełną zgodność z protokołami związanymi z uwierzytelnianiem, których możesz potrzebować, lub możesz migrować użytkowników do zarządzanych baz danych Auth0 i przestać martwić się o sposób przechowywania i sprawdzania haseł.
Jeśli wolisz nadal korzystać z bazy danych, zobacz Uwierzytelnianie użytkowników przy użyciu nazwy użytkownika i hasła przy użyciu niestandardowej bazy danych
(Dokumenty odnoszą się do MySQL jako przykładu, obsługiwane są inne silniki baz danych)
Z drugiej strony możesz bezproblemowo przenieść dane uwierzytelniające użytkownika do baz danych Auth0, wykorzystując proces migracji opisany w Migracja użytkowników do Auth0
Możesz także utworzyć wszystkich użytkowników w Auth0 za pomocą Management API, jeśli wolisz, aby wszyscy zaczęli korzystać z naszego algorytmu mieszania haseł jednocześnie. Ma to efekt uboczny polegający na wymaganiu od użytkowników zresetowania hasła.
Jak nadal korzystać z niestandardowego uwierzytelniania dwuetapowego (pytania weryfikacyjne)?
Potok uwierzytelniania zapewniany przez Auth0 jest w pełni konfigurowalny dzięki zastosowaniu reguł . Oznacza to, że nawet jeśli nie musisz implementować żadnych rzeczy związanych z protokołem, nadal możesz dostosować drobne szczegóły dotyczące sposobu uwierzytelniania w aplikacji.
Obejmuje to możliwość dalszego korzystania z istniejących pytań weryfikacyjnych jako sposobu na wykonanie dwuetapowego procesu uwierzytelnienia, w którym użytkownik podaje początkowe hasło zweryfikowane przez Auth0, a następnie pytasz go o dodatkowe informacje z reguły niestandardowej. (reguły są po prostu Javascript, więc możliwości są nieograniczone)
Możesz jednak zdecydować o odrzuceniu pytań weryfikacyjnych i zamiast tego skorzystać z Auth0 Guardian jako sposobu na zwiększenie bezpieczeństwa procesu uwierzytelniania.
Jak dostosować wygląd interfejsu użytkownika do uwierzytelniania?
Dzięki Auth0 możesz błyskawicznie uzyskać interfejs użytkownika do uwierzytelniania, korzystając z domyślnych stron logowania lub widżetów uwierzytelniania, takich jak Zablokuj . Wszystkie te obsługują pewien stopień dostosowania i zawsze możesz sam zdecydować o stworzeniu własnego interfejsu użytkownika i zamiast tego wykorzystać biblioteki Auth0 niższego poziomu ( Auth0.js ), które nie ograniczają interfejsu użytkownika.
Aby uzyskać więcej informacji na temat dostosowywania:
Jak zapobiec stronom z wyraźną zgodą?
Możesz użyć Auth0 zarówno jako dostawcy tożsamości do celów uwierzytelniania, jak również jako serwer autoryzacji OAuth2 (obecnie dostępny tylko w regionie USA) dla swojego interfejsu API.
Jako dostawca tożsamości nie musisz się martwić o strony zgody, użytkownik uwierzytelnia się za pomocą swoich danych uwierzytelniających zarządzanych przez Auth0, a następnie zostaje przekierowany do Twojej aplikacji - to wszystko.
W przypadku OAuth2 jako scenariusza usługi, gdy zgoda jest włączona, mapa drogowa obejmuje zezwalanie na ominięcie stron zgody dla niektórych aplikacji.
Podsumowując, wydaje się, że jest to bardzo interesujący i wymagający projekt, więc powodzenia niezależnie od ostatecznej decyzji.
Przeszedłem już przez coś podobnego w poprzednim zadaniu, kiedy musiałem ponownie wdrożyć system uwierzytelniania starszej aplikacji. Wdrożyliśmy własnego dostawcę tożsamości i serwer autoryzacji i szczerze mówiąc nadal mam wrażenie, że mogliśmy zapomnieć o czymś naprawdę istotnym.
Myślę, że to największy problem z wprowadzaniem własnego bezpieczeństwa, zdarzają się sytuacje, w których terminy nakładają skróty, a bezpieczeństwo nie jest tak naprawdę dobrym obszarem do tworzenia skrótów.
Jeśli masz dodatkowe pytania, daj mi znać, jeśli uważasz, że mogę być pomocny.
źródło