Wpis z mikrobloga

Mirki czy może mi ktoś wyjaśnić jak to jest z refresh tokenami? Rozumiem, że jak mam token do autoryzacji, to jeżeli on wygaśnie to używam refresh tokena do wygenerowania nowego access tokena, zgadza się?

Ok to tak - do wygenerowania nowego access tokena użytkownik musi się poprawnie uwierzytelnić, wysyłając w requeście login oraz hasło. Jeżeli wszystko się zgadza, to zwracam mu token.

Użytkownik po jakimś czasie próbuje uzyskać dostęp do zasobu gdzie wymagana jest autoryzacja, ale okazuje się, że access token wygasł, wysyła więc więc żądanie po nowy token wysyłając aktualnie posiadany refresh token. Serwer sprawdza, czy refresh token jest aktywny, jeżeli tak to generuje nowy access token, tak?

No dobra, a jak ktoś wykradnie mojemu klientowi refresh token, to będzie mógł sobie przecież wygenerować na podstawie tego refresh tokena, nowy access token? Całe uwierzytelnienie traci sens.

#programowanie #programista15k #token
  • 10
  • Odpowiedz
Refresh token nie jest nigdy zwracany użytkownikowi. Po stronie serwera weryfikujesz,czy przesłany access token nie utracił ważności. Jeśli utracił to odczytujesz z bazy refresh token i na jego podstawie generujesz i zwracasz nowy access token.
  • Odpowiedz
@JulianCarax: Wuuut, jaki to ma sens? xD
Normalnie wysyłasz użytkownikowi refresh token, jak wygasa access token to użytkownik wysyła refresh i dostaje nowy access token. Chodzi o to żeby nie trzeba było wpisywać haseł ciągle (bo access token można zapisać sobie w pamięci aplikacji, login i hasło to tak średnio bym powiedział). Do tego refresh token też wygasa po pewnym czasie (choć wiele API stosuje już politykę niewygasającego refresh tokenu).
  • Odpowiedz
@whale: Przykład. Loguję się do Google API z użyciem access tokena w celu wysłania wiadomości przez gmaila. Jeśli access token utracił ważność to przy użyciu zapisanego w bazie refresh tokena generuję nowy access token i za jego pomocą uzyskuję dostęp do api. Czego tu nie rozumiesz?
  • Odpowiedz
Nie wiem, czy dobrze Ciebie zrozumiałem. Generalnie access i refresh token używa się do autoryzacji usług, aby nie wymagać od użytkownika ciągłego logowania a jednocześnie nie trzymać jednego tokena dostępowego cały czas, co byłoby niebezpieczne, dlatego jest on odświeżany. Przykład użycia to np. wystawianie aukcji na allegro w imieniu użytkownika czy wysyłanie emaili z gmaila w jego imieniu (bez konieczności znania hasła). W przypadku zwykłego logowania do aplikacji (JS - react, angular
  • Odpowiedz
@JulianCarax: O rzeczywiście źle się zrozumieliśmy :D Jako użytkownika ja zrozumiałem konsumenta API czyli moją aplikację, która łączy się z jakimś serwerem, który udostępnia access i refresh token. A serwer, o którym pisałeś zrozumiałem jako to third party API, które udostępnia tokeny. Oczywiście jeśli nasza aplikacja ma jeszcze wiele innych użytkowników, to refresh tokeny nie powinny nigdy trafić do użytkownika końcowego dokładnie jak piszesz :D
  • Odpowiedz
Ok wszystko jasne, jeszcze pytanie o asp.net core - korzystając z atrybutu authorize przy danej metodzie, serwer z automatu sprawdza token. Gdzie powinna być zaimplementowana logika sprawdzania refresh tokena w przypadku gdy access token wygasł? Jakiś customowy middleware, czy robi się to w jakiś inny konkretny sposób?
  • Odpowiedz