Razem z kolegą zaczynamy bardzo mały projekt. Jak wstępnie ustaliliśmy składać się on będzie z dwóch podstawowych elementów: usługi serwującej dane i aplikacji mobilnej. Do tego pewnie potrzebny będzie jakiś panel administratora i to pewnie będzie prosta strona WWW. Projekt jest dla mnie nowy przede wszystkim ze względu na to, że chcemy go napisać w Javie. Kiedyś pisałem w tym języku proste aplikacje desktopowe, niestety nigdy nie miałem do czynienia z aplikacjami w modelu klient-serwer w tej technologii. Na szczęście model systemu przerobiłem już wielokrotnie w technologii .NET, więc pozostaje tylko dobrać odpowiednie narzędzia do poszczególnych elementów i powinno być ok. W końcu Java aż tak bardzo nie różni się od C# 😉
Podczas analizy uznaliśmy, że chcemy dość duży nacisk położyć na bezpieczeństwo dostępu do danych i ta działka trafiła się mi z racji tego, że obecnie siedzę w temacie autoryzacji i uwierzytelniania zawodowo. Jako, że część serwerowa napisana będzie z wykorzystaniem frameworka Spring, to powyższe kwestie naturalnie można rozwiązać dodatkiem do niego – Spring Security. Aktualnie jestem na etapie jego rozpoznawania i zapewne powstanie kilka wpisów jak zacząć z nim pracę. Wstępnie napiszę tylko, że umożliwia on implementację wielu różnych systemów uwierzytelniania i autoryzacji, począwszy od zwykłego modelu użytkownik/hasło, przez uwierzytelnianie certyfikatami, LDAP, a na wsparciu dla protokołu OAuth2 i standardu OpenIDCOnnect.
I teraz mam trochę dylemat, który mam nadzieję, wkrótce rozwiązać. Jaki system uwierzytelniania wykorzystać? Czy iść w kierunku prostoty, która jednak nie jest do końca aż tak bezpieczna, czy może skierować kroki w bardziej zaawansowane systemy oparte o protokół OAuth2 i OpenIDConnect i tokeny. W decyzji należy wziąć pod uwagę, że system ma być prosty i pisany będzie po godzinach. Trzeba znaleźć złoty środek pomiędzy bezpieczeństwem, pracochłonnością i łatwością obsługi. Dylemat każdego architekta oprogramowania.
W kolejnych wpisach poza opisem samego frameworka Spring Security postaram się opisać proces decyzyjny, który będzie prowadził do konkretnych rozwiązań. Stay focused!!!