Spring Security - jak to działa?

Postanowiłem poczytać i zaznajomić się z technologią Spring Security. Przedstawię Wam, wiedzę którą zdobyłem w sposób jaki ja bym chciał ją zdobyć. Mam nadzieję, że tym wpisem pomogę Wam zrozumieć jak działa spring security.

Co to jest Spring Security i do czego służy?

Spring Security to framework, który służy do zabezpieczenia aplikacji. Skupia się ona na warstwie samej aplikacji i zajmuje się dwoma zagadnieniami: uwierzytelnianiem (sprawdzenie kim jest użytkownik, czyli logowanie wszelkiego rodzaju) i autoryzowaniem (sprawdzeniem czy użytkownik ma prawa do zasobów (stron, plików, zapytań itd.)). Stał się bardzo popularny w rozwiązaniach biznesowych, ponieważ pozwalają na prostą i szybką konfigurację tej warstwy zabezpieczeń. Framework stale jest rozwijany i uzyskuje coraz to nowsze rozwiązania. W trakcie pisania tego wpisu posiada już kilkanaście gotowych rozwiązań. Jednocześnie umożliwia implementacje własnych rozwiązań.

Do czego używać?

Spring Security można używać do każdej aplikacji. W większości przypadków jednak używa się go do aplikacji webowych.

Jak działa?

Poznając framework można zauważyć podobieństwo do Java Persistance API. Musimy znaleźć dostawce naszego sposobu autoryzacji. Rozwiązania mogą być różne trzymanie użytkowników w pamięci, w bazie danych LDAP, Google+, facebook, jak i OpenID. Posiadając dostawcę, możemy go skonfigurować tak jak potrzebujemy. Następnie używając go możemy zweryfikować czy podane dane są prawidłowe. Ustawiamy w kontekście zabezpieczeń aplikacji uwierzytelnionego użytkownika. Następnie możemy w aplikacji weryfikować czy posiada on odpowiednią rolę w aplikacji, aby mieć dostęp do jej zasobów. Oczywiście tutaj nie posiadamy żadnych ograniczeń. Sami możemy zadecydować jaką metodą będziemy sprawdzać zakres możliwości użytkownika. Twórcy frameworka ułatwiają całą tą czynność. Udostępniają gotowe rozwiązania (np. dla aplikacji internetowych). Wystarczy napisać konfigurację (np. które zasoby mają być sprawdzane). Reszta rzeczy robi się "automagicznie".

W skrócie działa to tak:

  1. Użytkownik uwierzytelnia się,
  2. Dane zostają przekazane do funkcji uwierzytelniającej (w aplikacji webowej np. przez filtry, w samodzielnej sami przekazujemy przez kontroler itd.).
  3. Tworzymy token uwierzytelnienia i przekazujemy do dostawcy (provider) rozwiązania zabezpieczenia. Tutaj możemy mieć swoją klasę, która to robi.
  4. Dostawca zwraca nam czy użytkownik jest poprawnie zalogowany i dane o nim (np. jakie ma role w aplikacji itd.).
  5. Ustawiamy do kontekstu aplikacji dane użytkownika.
  6. Przy dostępie do jakiegoś zabezpieczonego zasobu sprawdzamy czy użytkownik ma do niego prawo i odpowiednio pozwalamy na dostęp do niego lub nie(tutaj też możemy użyć własnych rozwiązań).

Warto wiedzieć.

Występuje coś takiego jak anonimowy użytkownik. Najczęściej to on nie powinien mieć praw do żadnych strzeżonych zasobów. Osoba jest anonimowa wraz z korzystaniem z niestrzeżonych źródeł i nie będąc zalogowanym. Trzeba o tym pamiętać, gdy chcemy sprawdzić czy osoba jest uwierzytelniona. Otóż mając token anonimowego użytkownika osoba nie jest zalogowana.

Podsumowanie

Oto wszystko w moim wpisie. Mam nadzieję, że przybliżyłem Wam jak działa Spring Security. Podsumowując, framework udostępnia nam już gotowe rozwiązania zabezpieczenia aplikacji, które tylko konfigurujemy. Ułatwia to nam pisanie logiki biznesowej. Nie marnujemy przy tym naszego cennego czasu. Oczywiście, jest to tylko część funkcjonalności tego frameworku. Opisałem tylko najczęściej używany scenariusz.

Comments

Popular posts from this blog

Why TDD is bad practice?

How correctly imitate dependencies?

Software development using Angular 5 with Spring Boot