Specyfikacja JWT opisuje tylko ładunek i sposób jego wysyłania, ale pozostawia otwarty protokół uwierzytelniania, co pozwala na elastyczność, ale niestety elastyczność może prowadzić do antypatternów i błędnego projektowania.
Szukam dobrze przemyślanego i przetestowanego modelu korporacyjnego do uwierzytelniania JWT, którego mógłbym użyć lub dostosować, ale nie udało mi się znaleźć czegoś kompletnego.
Myślałem o:
- gdy nagłówek autoryzacji nie jest spełniony lub token JWT jest nieprawidłowy lub wygasł, wyślij HTTP 401
- w celu uwierzytelnienia użyj / zaloguj kanał REST, wyślij nazwę użytkownika i hasło jako obiekt JSON
- w celu utrzymania tokena przy użyciu, użyj / utrzymuj kanał REST, wywoływaj go co N (5) minut, otrzymuj nowy token JWT i zastępuj istniejący po każdym połączeniu (token wygasa po M (15) minutach)
Jednak niepokoi mnie konieczność tego kanału / keepalive. Z drugiej strony zmusza mnie do zapobiegania wygaśnięciu uwierzytelnienia, nawet jeśli nie ma użytkownika (decyzja, czy chcemy zachować aktywność, nie jest jeszcze spełniona) i oczywiście są to dodatkowe połączenia i dodatkowe komplikacje protokołu. Interesujące byłoby to, że serwer automatycznie przedłuża token. W środowisku opartym na sesjach dzieje się to przez zresetowanie znacznika czasu, tutaj jednak serwer musiałby wysyłać nowy token, może nie za każdym razem, ale gdy token wygaśnie za R (powiedzmy 10) minut. Ale umieszczenie go w treści odpowiedzi oznaczałoby zmodyfikowanie protokołu odpowiedzi JSON (dlatego rozwiązanie jest inwazyjne i nieprzejrzyste), a umieszczenie dodatkowego nagłówka HTTP, który klient może przetworzyć, niekoniecznie musi być dobrym wzorcem. JA'
Czy są jakieś gotowe wzorce korporacyjne, które odpowiadają moim otwartym punktom? Czy mój projekt protokołu jest wiarygodnym pomysłem? Wolałbym użyć czegoś gotowego niż projekt od zera.