Buduję interfejs API RESTful, który korzysta z tokenów JWT do uwierzytelniania użytkowników (wydawanych przez login
punkt końcowy i wysyłanych we wszystkich nagłówkach później), a tokeny należy odświeżyć po ustalonym czasie (wywoływanie renew
punktu końcowego, który zwraca odnowiony token ).
Możliwe jest, że sesja API użytkownika utraci ważność przed wygaśnięciem tokena, dlatego wszystkie moje punkty końcowe zaczynają się od sprawdzenia, czy: 1) token jest nadal ważny i 2) sesja użytkownika jest nadal ważna. Nie ma możliwości bezpośredniego unieważnienia tokena, ponieważ klienci przechowują go lokalnie.
Dlatego wszystkie moje punkty końcowe muszą sygnalizować moim klientom dwa możliwe warunki: 1) że nadszedł czas na odnowienie tokena lub 2) że sesja stała się nieważna i nie mają już dostępu do systemu. Mogę wymyślić dwie alternatywy dla moich punktów końcowych, aby zasygnalizować swoim klientom, gdy wystąpi jeden z dwóch warunków (zakładamy, że klienci mogą być dostosowani do dowolnej opcji):
- Zwróć kod http 401 (nieautoryzowany), jeśli sesja stała się nieprawidłowa, lub zwróć kod 412 (warunek wstępny nie powiódł się) po wygaśnięciu tokena i czas zadzwonić do
renew
punktu końcowego, który zwróci kod 200 (ok). - Zwraca 401 za zasygnalizowanie, że sesja jest nieprawidłowa lub token wygasł. W takim przypadku klient natychmiast wywoła
renew
punkt końcowy, jeśli zwróci 200, token zostanie odświeżony, ale jeślirenew
również zwróci 401, oznacza to, że klient jest poza systemem.
Którą z dwóch powyższych alternatyw poleciłbyś? Który z nich byłby bardziej standardowy, prostszy do zrozumienia i / lub bardziej RESTful? A może poleciłbyś w ogóle inne podejście? Czy widzisz jakieś oczywiste problemy lub zagrożenia bezpieczeństwa związane z którąkolwiek z tych opcji? Dodatkowe punkty, jeśli Twoja odpowiedź zawiera odniesienia zewnętrzne, które potwierdzają Twoją opinię.
AKTUALIZACJA
Chłopaki, proszę skoncentrować się na prawdziwym pytaniu - która z dwóch alternatywnych kodów HTTP sygnalizujących przedłużenie / unieważnienie sesji jest najlepsza? Nie przejmuj się faktem, że mój system korzysta z JWT i sesji po stronie serwera, to jest swoiste dla mojego API dla bardzo specyficznych reguł biznesowych, a nie tej części, której szukam pomocy;)