Written by 16:31 Dobre praktyki

Spring Security – jak skutecznie zabezpieczać aplikację?

Spring Security wydany w 2008 roku. Zajmuje się bezpieczeństwem aplikacji. Jest to zestaw narzędzi, które pomagają w łatwy sposób dodać uwierzytelnianie i autoryzację do aplikacji.

Trzy główne koncepty:

  • Authentication – uwierzytelnianie za pomocą np. loginu i hasła
  • Authorization – to sprawdzanie czy dana zalogowana osoba ma konkretne uprawnienie do tej części aplikacji np. do konkretnych endpointów
  • Servlet filters – to filtry, które są uruchamiane przed przejściem do kontrolera

Dodając poniższą zależność do spring-boot-starter-security mamy w pełni zabezpieczoną aplikację. Dlatego możemy teraz to odpowiednio skonfigurować.

Authentication Spring Security

Po dodaniu zależności, aby dostać się do aplikacji, musimy się uwierzytelnić, w związku z tym co godne uwagi możemy też nadpisać konfigurację, aby pewne ścieżki były dostępne bez uwierzytelnienia.

Robimy to poprzez rozszerzenie klasy WebSecurityConfigurerAdapter i nadpisaniu metody configure. Wywołując mvcMatchers(HttpMethod.GET, “/cart/**”).permitAll() sprawiamy, że wszystkie requesty GET idące na adres “/cart” i jego podścieżki będą dostępne dla wszystkich.

Natomiast wywołując anyRequest().authenticated() sprawiamy, że dla każdego innego requesta wymagamy uwierzytelnienia. Dlatego wywołując and().httpBasic() wymagamy uwierzytelnienia poprzez BasicAuth:

Authorization Spring Security

Możemy kontrolować dostęp do zasobów poprzez sprawdzanie uprawnień/ról, ponieważ takie role można przypisać do ścieżek poprzez konfigurację. Wykorzystując metodę hasRole albo hasAnyRole:

Można się zabezpieczyć też na poziomie metody – dodając adnotację. Żeby to zadziałało musimy do security adaptera dodać adnotację: @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)

  • flaga prePostEnabled pozwala na korzystanie z adnotacji @PreAuthorize i @PostAuthorize
  • flaga jsr250Enabled pozwala na korzystanie z adnotacji @RolesAllowed:

@RolesAllowed – ustandaryzowana adnotacja pochodząca z zależności javax.annotation-api. Przyjmuje uprawnienie/rolę jako String.

@PreAuthorize i @PostAuthorize – adnotacja Springowa mająca większą moc niż powyższa. Oprócz Stringa może przyjmować poprawne wyrażenia SpEL (Spring Expression Language).

Zabezpieczanie metod za pomocą adnotacji @RoleAllowed, @PreAuthorize jest łatwe, ponieważ  wystarczy:

Stwórzmy dwóch użytkowników do testów. Jeden admin, który ma rolę “ADMIN” – będzie miał dostęp do powyższych dwóch metod. I użytkownika Johna. Ma on rolę “CLIENT”. Będzie miał dostęp tylko do metody updateName:

Inne możliwości Spring Security:

  • pozwala na wymuszenie bezpiecznego połączenia HTTPS
  • zabezpiecza aplikacje przed atakami CSRF (atak na przeglądarkę ofiary – możesz o tym przeczytać tutaj: link)
  • zabezpiecza aplikacje przed atakami XSS (wstrzyknięciu do przeglądarki ofiary fragmentu języka skryptowego – możesz o tym przeczytać tutaj: link)
  • zapewnia prostą integrację z OAuth2 – o tym przeczytasz tutaj: link

Zalety

Spring Security oferuje gotowe rozwiązania. Łatwo je wdrożyć. Nie trzeba tworzyć wszystkiego od podstaw. Jest mniejsze ryzyko wystąpienia błędów. Dlatego błędy są trudne do wykrycia. Często kosztowne.

Umożliwia rozszerzanie. W związku z tym dostępne metody można obudować. Nie narzucane są żadne ograniczenia. Ponieważ można dostosować rozwiązania do swoich potrzeb.

Jest w pełni zintegrowany z ekosystemem Springa – z pozostałymi jego modułami. Niewątpliwie posiada także szerokie community. Ponieważ jest nieustannie rozwijany.

Film o podstawowej konfiguracji znajdziesz np. tutaj: link

 

Źródła:

https://www.marcobehler.com

Tagi: , Last modified: 7 stycznia 2022
Close

PRAKTYCZNE WSKAZÓWKI Z PROGRAMOWANIA W JAVIE W PIGUŁCE

Dołącz do 1000+ programistów Java, czytających praktyczne maile o dobrych praktykach programowania, architekturze mikroserwisowej i gorących newsach (1 raz w tygodniu)

Praktyczna Java

Swój Pakiet Powitalny Wypchany Mięsem Dostaniesz Już Za 15 Minut.

Uzupełnienie powyższego pola stanowi zgodę na otrzymywanie od Kamila Michno newslettera zawierającego treści informacyjnych, marketingowych dotyczących portalu praktycznajava.pl. Zgodę można wycofać w każdym czasie. Wycofanie zgody nie ma wpływu na zgodność z prawem przetwarzania dokonanego przed jej wycofaniem.