Jak zabezpieczyć Spring Boot za pomocą uwierzytelniania i autoryzacji JWT
Witajcie, tutaj dowiemy się o wiosennej implementacji zabezpieczeń za pomocą Spring Boot3.0 i JWT. Jest to kontynuacja Spring Security część 1: Link tam omawialiśmy implementację opartą na rolach bezpieczeństwa Spring, w tym omówimy, jak wdrożyć JWT.
JWT (JSON Web Tokens) to standard bezpiecznego przedstawiania oświadczeń między dwiema stronami. Jest to kompaktowy, bezpieczny dla adresów URL sposób przedstawiania roszczeń, które mają być przekazywane między dwiema stronami. JWT składa się z trzech części: nagłówka, ładunku i podpisu.
Nagłówek składa się z algorytmu i typu tokena, Ładunek składa się z tematu, nazwy, daty wydania, Weryfikacja podpisu to kombinacja zakodowanego nagłówka, ładunku i tajnego klucza. Token JWT jest połączeniem tych trzech
Spring Security można zintegrować z JWT w celu zabezpieczenia aplikacji internetowych poprzez generowanie, analizowanie i sprawdzanie poprawności JWT.
Poniżej znajduje się przegląd tego, jak działa uwierzytelnianie i autoryzacja JWT w Spring Boot :
- Uwierzytelnianie użytkownika: gdy użytkownik loguje się do systemu, serwer weryfikuje poświadczenia użytkownika, takie jak jego nazwa użytkownika i hasło. Jeśli poświadczenia są poprawne, serwer generuje token JWT dla użytkownika i zwraca go klientowi.
- Tworzenie tokenu JWT: serwer tworzy token JWT przez zakodowanie informacji o tożsamości użytkownika i innych niezbędnych danych, takich jak czas wygaśnięcia, w obiekcie JSON. Obiekt JSON jest następnie podpisany przy użyciu tajnego klucza lub pary kluczy publiczny/prywatny.
- Magazyn tokenów: klient przechowuje token JWT lokalnie, zazwyczaj w pliku cookie lub w magazynie lokalnym.
- Autoryzacja: dla każdego kolejnego żądania klient wysyła JWT w nagłówku żądania. Serwer weryfikuje podpis JWT i dekoduje jego zawartość, aby wyodrębnić informacje o tożsamości użytkownika i inne szczegóły. Na podstawie tych informacji serwer może następnie autoryzować użytkownika do dostępu do określonych zasobów lub wykonywania określonych czynności.
- Sprawdzanie poprawności tokenu: Serwer może również sprawdzać poprawność tokenu JWT, aby upewnić się, że nie został on zmodyfikowany i nie wygasł. Jeśli token jest nieprawidłowy, serwer może odrzucić żądanie lub zażądać ponownego zalogowania użytkownika.
Krok 1: Dodaj zależności JWT
Krok 2: Utwórz punkt końcowy do uwierzytelniania i generowania JWT
W metodzie CreateToken tworzymy token poprzez ustawienie roszczeń, tematu, daty wystawienia i wygaśnięcia, podpisu.
Krok 3: Utwórz filtr do sprawdzania poprawności JWT
utwórz klasę dla filter i rozszerz ją o OncePerRequestFilter, zastąp metodę doFilterInternal i wywołaj token autoryzacyjny z nagłówka. Zweryfikuj token, wyodrębniając nazwę użytkownika i datę ważności z tokena. Ten filtr służy do sprawdzania poprawności tokenu JWT dla każdego wywołania interfejsu API.
Krok 4: Dodaj konfigurację, aby autoryzować wywołania API
Utwórz klasę i dodaj metodę autoryzacji, w powyższym kodzie, dając dostęp do punktów końcowych „/products/new”, „/products/authenticate” wszystkim użytkownikom, dla punktu końcowego „/products/**” tylko uwierzytelnieni użytkownicy z prawidłowym JWT mogą dostęp.
Testowanie implementacji
Uwierzytelnianie i generowanie tokena
Skopiuj wygenerowany token i dodaj go do innego wywołania interfejsu API, uzyskuję dostęp do poniższego interfejsu API z poświadczeniami administratora
Jeśli spróbujemy uzyskać dostęp do interfejsu API przy użyciu poświadczeń administratora, do którego dostęp ma tylko użytkownik, otrzymamy błąd 403 Forbidden
Uwaga: jeśli chcesz działający kod github tej implementacji, śledź mnie i skomentuj swój identyfikator e-mail. Link do kodu źródłowego prześlę na Twój adres e-mail.
Część 1: Dostęp oparty na rolach Spring Security za pomocą Spring Boot
Linki do innych koncepcji Spring Boot:
Wiosenny samouczek AOP
Samouczek rejestrowania Spring Boot
Scentralizowana konfiguracja w Spring Boot
Najczęściej używane adnotacje Hibernate