2014-12-31 24 views
31

Buduję aplikację mobilną i używam JWT do uwierzytelniania.JWT odśwież przepływ tokena

Wygląda na to, że najlepiej jest sparować token dostępu JWT z tokenem odświeżania, aby móc wygasać token dostępu tak często, jak chcę.

  1. Jak wygląda token odświeżania? Czy to losowy ciąg? Czy ten ciąg jest szyfrowany? Czy to kolejny JWT?
  2. Odświeżający token będzie przechowywany w bazie danych na modelu użytkownika w celu uzyskania dostępu, prawda? Wygląda na to, że powinno być zaszyfrowane w tym przypadku:
  3. Czy wysłałem odświeżający token z powrotem po zalogowaniu użytkownika, a następnie czy klient ma dostęp do oddzielnej trasy w celu odzyskania tokenu dostępu?
+1

Uwaga: w przypadku korzystania z odświeżania tokenów należy umożliwić użytkownikom unieważnienie ich w interfejsie użytkownika. Zaleca się także automatyczne wygaśnięcie ich, jeśli nie są używane na przykład przez miesiąc. –

+0

@jtmarmon: w jaki sposób przechowujesz token odświeżania po stronie klienta? Mam na myśli urządzenie z Androidem z bezpieczeństwem? – j10

Odpowiedz

11

Zakładając, że jest to o OAuth 2.0, ponieważ jest o JWTs i odświeżyć znaki ...:

  1. jak tokenu dostępu w zasadzie token odświeżania może być coś w tym wszystkie opcje, które opisujesz; JWT może być użyty, gdy serwer autoryzacji chce być bezpaństwowcem lub chce wymusić jakąś semantykę "proof-of-owned" na kliencie, który ją prezentuje; pamiętaj, że token odżałujcy różni się od tokenu dostępu, ponieważ nie jest prezentowany na serwerze zasobów, ale tylko na serwerze autoryzacji, który go wystawił, więc samodzielna optymalizacja sprawdzania poprawności dla JWTs-as-access-tokens ma nie pomieścić do odświeżenia tokenów

  2. , która zależy od bezpieczeństwa/dostępu do bazy danych; jeśli baza danych jest dostępna dla innych podmiotów/serwerów/aplikacji/użytkowników, to tak (ale twój przebieg może się różnić w zależności od miejsca i sposobu przechowywania klucza szyfrowania ...). i odświeżaj tokeny w tym samym czasie, w zależności od grantu używanego przez klienta do ich uzyskania; spec zawiera szczegółowe informacje i opcje na każdym z standaryzowanych dotacji

+1

2. Należy przechowywać hasz odświeżającego tokena w bazie danych, a następnie porównać hasz odświeżającego tokenu użytkownika z przechowywanym hashem. W tym miejscu obowiązuje zasada "nie przechowuj haseł zawierających tekst w bazie danych". Rozważ token taki jak losowe hasło, które zrobiłeś dla użytkownika. – Rohmer

10

siedzibę w tym implementation with Node.js of JWT with refresh token:

1) W tym przypadku używają UID i to nie jest JWT. Gdy odświeżają token, wysyłają token odświeżania i użytkownika. Jeśli zaimplementujesz go jako JWT, nie musisz wysyłać użytkownika, ponieważ będzie on wewnątrz JWT.

2) Dokonują tego w oddzielnym dokumencie (tabela). Ma to dla mnie sens, ponieważ użytkownik może być zalogowany w różnych aplikacjach klienckich i może mieć token odświeżania według aplikacji. Jeśli użytkownik straci urządzenie z zainstalowaną jedną aplikacją, token odświeżania tego urządzenia może zostać unieważniony bez wpływu na inne zalogowane urządzenia.

3) W tej implementacji jest to odpowiedź na metodę logowania zarówno z tokenem dostępu, jak i tokenem odświeżającym. Szwy są dla mnie poprawne.

Powiązane problemy