Токен оновлення служить принаймні двом цілям. По-перше, маркер оновлення є свого роду «доказом» того, що клієнт OAuth2 вже отримав дозвіл від користувача на доступ до своїх даних, і тому може знову вимагати новий маркер доступу, не вимагаючи від користувача проходження всього потоку OAuth2. По-друге, це допомагає збільшити весь потік безпеки в порівнянні з довговічним маркером доступу. Я торкнусь обох цих пунктів трохи детальніше.
Оновіть маркери як засіб, щоб не дратувати користувача
Поговоримо про першу мету на прикладі. Припустимо, ви, Користувач, використовували веб-програму сторонніх клієнтів, яка хотіла взаємодіяти з даними вашого облікового запису YouTube. Після надання дозволу програмі Клієнт використовувати ваші дані YouTube, чи хочете ви, щоб програма Клієнт попросила вас надати дозвіл зновуколи термін дії його маркера YouTube закінчився? Що станеться, якщо термін дії токена YouTube був дуже низьким, наприклад, 5 хвилин. Було б трохи неприємно, коли б програма клієнта запитувала ваш дозвіл принаймні кожні 5 хвилин! Рішення, яке OAuth2 пропонує для цієї "проблеми", - це маркери оновлення. Використовуючи маркери оновлення, маркер доступу може залишатися недовгим (що бажано на випадок, якщо маркер доступу просочився або якось викрадений), а маркер оновлення може залишатися довгим (er) -живим, що дозволяє Клієнту отримати новий доступ маркер, коли термін дії закінчується, не вимагаючи дозволу користувача (знову).
Але навіщо маркер оновлення? Якщо суть полягає в тому, щоб не прослуховувати користувача з запитами дозволів, то чому Клієнт не може просто сказати "Гей, сервер авторизації, я хочу інший маркер доступу. Зараз!"? Або: "Гей, сервер авторизації, ось мій термін дії минув, дайте мені новий!". Ну, маркер оновлення служить своєрідним "доказом" того, що Клієнт у якийсь початковий момент часу отримав доступ від Користувача. Цей "доказ" має форму маркера оновлення, який цифровим підписом отримує Сервер авторизації. Подання клієнтом маркера оновлення, Сервер авторизації може підтвердити, що Клієнт отримав, колись у минулому, дозвіл від Користувача, і Клієнту не потрібно повторно запитувати Користувача.
Оновити маркер як засіб для підвищення безпеки
Однак це піднімає питання: "Ну, що станеться, якщо маркер оновлення витік або викрадений, або просто зберігається шкідливим клієнтським додатком, який не позбавляється від нього на прохання користувача? Чи не може зловмисник просто продовжувати використовувати маркер оновлення для отримання дійсного маркера доступу на невизначений час (або до закінчення терміну його дії)? Це питання призводить до обговорення другої мети, про яку я вже згадував, маркерів оновлення, що сприяє більш безпечному потоку.
Проблема, яка виникає з маркерами доступу, полягає в тому, що після придбання вони лише колись подаються на Сервер ресурсів (наприклад, YouTube). Отже, якщо маркер доступу викрадений або порушений, як сказати серверу ресурсів не довіряти цьому маркеру? Ну, насправді не можна. Єдиний спосіб зробити це - змінити приватний ключ підписання на сервері авторизації (ключ, який підписав маркер спочатку). Думаю, це незручно робити, а в деяких випадках (наприклад, Auth0) не підтримується.
З іншого боку, токени оновлення потрібно часто представляти на Сервісі авторизації, і тому, якщо такий скомпрометований, то тривіально відкликати або заборонити маркер оновлення в цілому, і не потрібно змінювати будь-які ключі підписання.