Wpis z mikrobloga

Mirkasy,
potrzebuje łopatologicznego wyjaśnienia odnośnie działania tokenu JWT.
1. Na podstawie credentiali tworzymy token JWT.
2. Podpisany zostaje algorytmem RSA a więc mamy klucz prywatny i publiczny.

Teraz gdzie przechowujemy nasz klucz prywatny?
Trzecia część tokena czyli Signature to klucz publiczny?
Jak klient uderzy do nas z takim tokenem to w jaki sposób możemy sprawdzić naszym prywatnym kluczem, że to ten token?
#java #spring #springboot
  • 13
@victordeleco2:

Teraz gdzie przechowujemy nasz klucz prywatny?

W bezpiecznym miejscu ( ͡° ͜ʖ ͡°) To jest na serwerze wystawiającym tokeny.

Trzecia część tokena czyli Signature to klucz publiczny?

Signature to podpis, wyliczony na podstawie treści tokena przy użyciu klucza prywatnego.

Jak klient uderzy do nas z takim tokenem to w jaki sposób możemy sprawdzić naszym prywatnym kluczem, że to ten token?

Podpisujesz kluczem prywatnym a następnie przy
@victordeleco2: podpis sprawdzasz publicznym. To jest gwarant tego, że podpisałeś go prywatnym wcześniej (jeśli podpis się zgadza). Generacja tokenów i ich weryfikacja, w ogólności, może być w różnych miejscach.
Cała zaleta koncepcji JWT to, że jest bezstanowy i to klient go przechowuje, a nie twoja baza.
@Roballo: tokeny i tak generują się na podstawie czegoś (np. poprzedniego tokena). Więc ustaliłem sam ze sobą, że przy generacji tokenu sprawdzam, czy użytkownik nie jest przypadkiem zablokowany :)
@victordeleco2 Frontend nie musi sprawdzać podpisu bo powinien raczej ufać wystawiającemu. Ale następnie może taki token odesłać do backendu lub innej aplikacji i ona będzie mogła sprawdzić przy pomocy klucza publicznego czy nikt go nie edytował.
Dzięki temu ten serwis może być pewien że to co jest zawarte w ciele tokena(nazwa zalogowanego użytkownika, zbiór uprawnień lub cokolwiek sobie zechcesz) było prawdziwe w momencie wystawienia. Bazując na tym może pozwolić ci odczytać jakieś
@victordeleco2 Musi go albo mieć wprowadzony w procesie konfiguracji. Część standardów jak openid connect specyfikuje też format endpointa zawierającego informacje o wspieranych funkcjonalnościach oraz potrzebne klucze publiczne.
W każdym bądź razie musisz dostarczyć albo sam klucz publiczny albo namiary gdzie go szukać.
@Waffenek: Rozjaśniło mi się trochę. Stworzyłem sobie szybki projekt spring bootowy, gdzie generuje taki token JWT i pózniej przy kolejnych requestach dołączam go do headeru, odparsowuje i cos tam z niego biore. Dziękuje Ci za odpowiedzi, mega pomocne i wyczerpujące. Kolegom powyżej również.