Token odświeżania służy co najmniej dwóm celom. Po pierwsze, token odświeżania jest rodzajem „dowodu”, że klient OAuth2 otrzymał już pozwolenie od użytkownika na dostęp do jego danych, więc może ponownie zażądać nowego tokena dostępu bez konieczności przechodzenia przez cały przepływ OAuth2. Po drugie, pomaga zwiększyć cały przepływ zabezpieczeń w porównaniu z długowiecznym tokenem dostępu. Omówię oba te punkty bardziej szczegółowo.
Odśwież tokeny, aby nie denerwować użytkownika
Porozmawiajmy o pierwszym celu na przykładzie. Załóżmy, że Ty, jako użytkownik, korzystasz z aplikacji internetowej klienta innej firmy, która chce wejść w interakcję z danymi Twojego konta YouTube. Czy po udzieleniu aplikacji klienckiej pozwolenia na wykorzystanie danych z YouTube chcesz, aby aplikacja kliencka wyświetlała monit o wyrażenie zgody? ponowniekiedy wygasł jego token YouTube? Co się stanie, jeśli czas wygaśnięcia tokena YouTube będzie bardzo krótki, np. 5 minut. Byłoby trochę denerwujące, gdyby aplikacja klienta pytała Cię o zgodę co najmniej co 5 minut! Rozwiązaniem proponowanym przez OAuth2 dla tego „problemu” są tokeny odświeżania. Korzystając z tokenów odświeżania, token dostępu może pozostać krótkotrwały (co jest pożądane w przypadku wycieku lub kradzieży tokena dostępu), a token odświeżania może pozostać długo (er) żywy, umożliwiając Klientowi uzyskanie nowego dostępu token, gdy wygasa bez wymagania zgody użytkownika (ponownie).
Ale po co token odświeżania? Jeśli chodzi o to, aby nie zaniepokoić Użytkownika prośbami o pozwolenie, to dlaczego klient nie może po prostu powiedzieć „Hej, serwer autoryzacji, chcę innego tokena dostępu. Teraz!”? Lub „Hej serwer autoryzacyjny, oto mój wygasły token, daj mi nowy!”. Cóż, token odświeżania służy jako swego rodzaju „dowód”, że Klient w pewnym momencie uzyskał dostęp od Użytkownika. Ten „dowód” ma postać tokena odświeżania podpisanego cyfrowo przez serwer autoryzacji. Przedstawiając przez Klienta token odświeżania, Serwer Autoryzacji może zweryfikować, czy Klient w pewnym momencie w przeszłości otrzymał pozwolenie od Użytkownika, a Klient nie musi ponownie pytać Użytkownika.
Odśwież token jako sposób na zwiększenie bezpieczeństwa
W związku z tym pojawia się pytanie: „Cóż, co się stanie, jeśli token odświeżania zostanie ujawniony lub skradziony lub po prostu przechowywany przez złośliwą aplikację klienta, która nie pozbywa się go na żądanie użytkownika? Czy osoba atakująca nie może po prostu kontynuować używać tokena odświeżania, aby uzyskać ważny token dostępu na czas nieokreślony (lub do czasu jego wygaśnięcia)? To pytanie prowadzi do omówienia drugiego celu, o którym wspomniałem, odświeżania tokenów przyczyniających się do bezpieczniejszego przepływu.
Problem, który pojawia się w przypadku tokenów dostępu, polega na tym, że raz nabyte są one zawsze przedstawiane tylko na serwerze zasobów (na przykład w YouTube). Jeśli więc token dostępu zostanie skradziony lub przejęty, jak powiedzieć serwerowi zasobów, aby nie ufał temu tokenowi? Cóż, naprawdę nie możesz. Jedynym sposobem na to byłaby zmiana prywatnego klucza podpisu na serwerze autoryzacyjnym (klucz, który w pierwszej kolejności podpisał token). Wyobrażam sobie, że jest to niewygodne, aw niektórych przypadkach (np. Auth0) nie jest obsługiwane.
Z drugiej strony tokeny odświeżania muszą być często przedstawiane serwerowi autoryzacji, więc jeśli ktoś zostanie naruszony, to trywialne jest unieważnienie lub odrzucenie tokena odświeżania jako całości i nie trzeba zmieniać żadnych kluczy podpisywania.