Deaktywacja JWT po usunięciu użytkownika

0

Witam, wzorując się na projekcie (https://github.com/sanlew/clinic-server) zrobiłem swój serwer. Czy może ktoś mi powiedzieć czy w tym projekcie z linka, tokeny kasują sie automatycznie z serwera, np kiedy użytkownik zostanie usunięty z bazy danych ? Jeśli tak, to proszę w skrócie o wytłumaczenie jak tam to sie odbywa ? Jeśli nie, to jak można zrobić przy kasowaniu użytkownika z bazy danych, kasowanie tokena dla niego należącego ?

Spoglądając na (https://www.baeldung.com/registration-token-cleanup) , wnioskuję że trzeba by dodać niezbędne klasy i metody tak jak opisali. Ale czy to jest prawidłowe podejście ?

1

Jako że JWT nie są nigdzie zapisywane, nie ma skąd ich usuwać - wystawiasz token np. na 24h i jeśli powiązany z nim użytkownik zostanie usunięty, tokenu nie uda się odnowić i użytkownik utraci dostęp do systemu.

0

Czyli potem w bazie danych te wszystkie tokeny zostaja i z czasem może taka tabela zapełnić się kilkoma tysiącami.

W UserService na kasowanie użytkownika zrobiłem taka metode:

@Transactional
    public void deleteUser(User user){
        if(!userRepository.findById(user.getId()).isPresent()){
            throw new ResourceNotFoundException();
        } else {
            this.userRepository.delete(user);
        }
    }

W UserController :

@RequestMapping(value = "/delete/{id}",
            method = RequestMethod.POST)
    public void deleteUser(@PathVariable("id") long id, User user){
        this.userService.deleteUser(user);
    }

Jeśli bym dodał coś na wzór z poradnika Baeldung i dodał troche kodu w tych metodach było by wtedy możliwe kasowanie tych tokenów ?
Czy tak sie robi ?

1

JWT nie powinno się trzymać w żadnej bazie, na tym polega cała ich idea.

Z ciekawości: dlaczego wybrałaś akurat JWT ponad inne sposoby uwierzytelniania?

0

A co byś polecił zamiast JWT? Tutaj autoryzacja użytkownika jest zrobiona za pomoca Spring Security i OAuth2. Użytkownik dostaje token.

1

https://developer.okta.com/blog/2017/08/17/why-jwts-suck-as-session-tokens

Zamiast JWT (których ficzerów i tak nie wykorzystujesz, skoro wrzucasz je do bazy danych), przy uwierzytelnianiu generuj najzwyklejsze UUID i to je traktuj jak token - proste, małe, sprawdzone w praktyce. Następnie przy usuwaniu użytkownika pozbywaj się też jego tokenu z bazy danych (z poziomu repozytorium albo ON DELETE CASCADE).

2

Czyli potem w bazie danych te wszystkie tokeny zostaja

Tokenów NIE MA W BAZIE! Na tym polega cała ich idea. Wystawiasz token i tyle. On zawiera wszystkie informacje sam w sobie. Inna sprawa ze możesz usunąć usera, wtedy możesz to sobie sprawdzić albo po stronie serwera który sprawdza ważność tokenu, albo (jeśli go nie kontrolujesz) po stronie twojej aplikacji jak już masz w kontrolerze Principal

0

Dzięki za wyjaśnienie i pomoc:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1