Mam program, który integruje się z interfejsem YouTube Live Streaming API. Działa na licznikach czasu, więc stosunkowo łatwo było mi zaprogramować, aby pobierać nowy token dostępu co 50 minut za pomocą tokena odświeżania. Moje pytanie brzmi: dlaczego?
Kiedy uwierzytelniłem się w YouTube, dostałem token odświeżania. Następnie używam tego tokena odświeżania, aby uzyskać nowy token dostępu mniej więcej raz na godzinę. Jeśli mam token odświeżania, ZAWSZE mogę go użyć, aby uzyskać nowy token dostępu, ponieważ nigdy nie wygasa. Więc nie widzę, jak to jest bezpieczniejsze niż po prostu dać mi Access Token od samego początku i nie zawracać sobie głowy całym systemem Refresh Token.
authentication
oauth
youtube-api
access-token
refresh-token
Jason Axelrod
źródło
źródło
Odpowiedzi:
Zasadniczo tokeny odświeżania służą do uzyskiwania nowego tokena dostępu.
Aby wyraźnie rozróżnić te dwa tokeny i uniknąć pomieszania, oto ich funkcje podane w strukturze autoryzacji OAuth 2.0 :
Teraz, aby odpowiedzieć na pytanie, dlaczego nadal otrzymywałeś token odświeżania, zamiast tylko zabezpieczać token dostępu, głównym powodem podanym przez Internet Engineering Task Force w tokenach odświeżania jest:
Aby uzyskać bardziej szczegółowe i pełne informacje o przepływie OAuth 2.0, zapoznaj się z następującymi źródłami:
źródło
@Teyam wzmiankuje SO post Dlaczego OAuth v2 ma zarówno tokeny dostępu, jak i odświeżania? ale wolę inną odpowiedź tam: https://stackoverflow.com/a/12885823/254109
TL; DR
refresh_token
nie zapewnia zwiększonego bezpieczeństwa. Ma to na celu poprawę skalowalności i wydajności. Następnieaccess_token
może być przechowywany tylko w jakimś szybkim, tymczasowym magazynie (takim jak pamięć). Umożliwia także autoryzację i separację serwerów zasobów.źródło
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.
źródło
„Więc nie widzę, jak to jest bezpieczniejsze niż po prostu dać mi Access Token od samego początku i nie zawracać sobie głowy całym systemem Refresh Token”. Zmagałem się z tym samym pytaniem. Krótka odpowiedź brzmi: token odświeżania jest niezbędny, aby upewnić się, że poświadczenia nie wygasły.
Przykład może pomóc: mam bazę danych, w której przechowywane są twoje dane medyczne. Zgadzasz się na udostępnienie swojej dokumentacji medycznej współmałżonkowi. Twój współmałżonek używa swojego Access Token, aby odczytać Twoje rekordy z mojej bazy danych. Za dwa tygodnie twój współmałżonek ponownie sprawdzi twoją dokumentację medyczną i użyje token odświeżania, aby upewnić się, że nadal ma pozwolenie (z serwera uwierzytelniającego) na przeglądanie twoich danych. Token odświeżania omija potrzebę ponownego wprowadzenia przez współmałżonka swoich poświadczeń (nazwy użytkownika i hasła) na serwerze uwierzytelniającym, ale zapewnia, że nadal mają uprawnienia dostępu do zasobu. Nigdy nie wygasający token dostępu nie wiedziałby, czy cofnąłeś prawa współmałżonka do dostępu do swojej dokumentacji medycznej.
źródło