Ta odpowiedź została zebrana dzięki pomocy dwóch starszych deweloperów (John Brayton i David Jennes).
Głównym powodem użycia tokena odświeżającego jest zmniejszenie powierzchni ataku.
Załóżmy, że nie ma klucza odświeżania i przejdźmy do tego przykładu:
Budynek ma 80 drzwi. Wszystkie drzwi są otwierane za pomocą tego samego klucza. Klucz zmienia się co 30 minut. Pod koniec 30 minut muszę przekazać kluczowi stary klucz i zdobyć nowy.
Jeśli jestem hakerem i zdobędę twój klucz, to pod koniec 30 minut przekażę go do klucza i zdobędę nowy klucz. Będę mógł ciągle otwierać wszystkie drzwi bez względu na zmianę klucza.
Pytanie: Ile miałem okazji włamać się do klucza w ciągu 30 minut? Miałem 80 okazji do hakowania za każdym razem, gdy używałeś klucza (pomyśl o tym jak o wysłaniu żądania sieciowego i przekazaniu tokena dostępu w celu identyfikacji). To 80-krotna powierzchnia ataku.
Przejdźmy teraz do tego samego przykładu, ale tym razem załóżmy, że jest klawisz odświeżania.
Budynek ma 80 drzwi. Wszystkie drzwi są otwierane za pomocą tego samego klucza. Klucz zmienia się co 30 minut. Aby uzyskać nowy klucz, nie mogę przekazać starego tokena dostępu. Muszę tylko przekazać klucz odświeżania.
Jeśli jestem hakerem i zdobędę twój klucz, mogę go używać przez 30 minut, ale pod koniec 30 minut wysłanie go do klucza nie ma żadnej wartości. Jeśli to zrobię, kluczowy klucz powie po prostu ten zły token odświeżania. Aby móc przedłużyć mój hack, musiałbym zhakować kuriera do klucza. Kurier ma wyraźny klucz (pomyśl o tym jak o tokenie odświeżającym).
Pytanie: Ile możliwości hakowania miałem w ciągu 30 minut w stosunku do klucza odświeżania? 80? Nie. Miałem tylko 1 okazję do włamania. W tym czasie kurier komunikuje się z kluczowcem. To 1X powierzchnia ataku. Miałem 80 okazji hakowania przeciwko kluczowi, ale po 30 minutach nie są one dobre.
Serwer zweryfikuje token dostępu na podstawie poświadczeń i podpisania (zwykle) JWT.
Wyciekanie tokena dostępu jest złe, ale gdy wygasa, nie jest już przydatne dla atakującego. Wyciekanie tokenu odświeżania jest znacznie gorsze, ale przypuszczalnie mniej prawdopodobne. (Myślę, że jest miejsce na pytanie, czy prawdopodobieństwo wycieku tokena odświeżającego jest znacznie niższe niż wycieku tokenu dostępowego, ale taki jest pomysł).
Chodzi o to, że token dostępu jest dodawany do każdego złożonego żądania, podczas gdy token odświeżania jest używany tylko podczas przepływu odświeżania, więc mniejsza szansa, że MITM zobaczy token
Częstotliwość pomaga atakującemu. Heartbleed - potencjalne wady bezpieczeństwa w SSL, potencjalne wady bezpieczeństwa u klienta i potencjalne wady bezpieczeństwa na serwerze umożliwiają wyciek.
Ponadto, jeśli serwer autoryzacji jest oddzielny od serwera aplikacji przetwarzającego inne żądania klienta, ten serwer aplikacji nigdy nie zobaczy tokenów odświeżania. Zobaczy tylko tokeny dostępu, które nie będą dłużej działać.
Podział na przedziały zapewnia bezpieczeństwo.
Na koniec zobacz tę niesamowitą odpowiedź
O czym NIE jest token odświeżania?
Możliwość aktualizacji / odwołania poziomu dostępu za pomocą tokenów odświeżania jest produktem ubocznym wyboru użycia tokenów odświeżania, w przeciwnym razie samodzielny token dostępu może zostać odwołany lub zmodyfikowany jego poziom dostępu po wygaśnięciu, a użytkownicy otrzymają nowy token