Яка мета “Refresh Token”?


96

У мене є програма, яка інтегрується з API прямих трансляцій YouTube. Він працює на таймерах, тому мені було відносно легко запрограмувати отримання кожного маркера доступу кожні 50 хвилин за допомогою Refresh Token. Моє питання, чому?

Коли я пройшов аутентифікацію на YouTube, це дало мені Refresh Token. Потім я використовую цей маркер оновлення, щоб отримувати новий маркер доступу приблизно раз на годину. Якщо у мене є Refresh Token, я ЗАВЖДИ можу використовувати його для отримання нового маркера доступу, оскільки він ніколи не закінчується. Тому я не бачу, як це безпечніше, ніж просто надати мені маркер доступу з самого початку і не турбуватися про всю систему Refresh Token.



1
Маркери доступу є маркерами на пред'явника . Це означає, що жодна інша ідентифікація не потрібна, а маркер доступу - це все, що потрібно, щоб видавати себе за вас. Через це вони завжди повинні залишатися недовгими. З іншого боку, маркери оновлення не є маркерами на пред'явника . Коли ви надсилаєте маркер оновлення на YouTube, щоб отримати новий маркер доступу, вам також потрібно надіслати client_id та client_secret. Через це маркер оновлення може залишатися довшим, оскільки набагато менше шансів, що і маркер оновлення, і client_secret будуть порушені.
jrahhali

Відповіді:


90

В основному, маркери оновлення використовуються для отримання нового маркера доступу.

Щоб чітко розмежувати ці два маркери та уникнути змішування, ось їх функції, наведені в OAuth 2.0 Authorization Framework :

  • Токени доступу видаються стороннім клієнтам сервером авторизації з дозволу власника ресурсу. Клієнт використовує маркер доступу для доступу до захищених ресурсів, розміщених сервером ресурсів.
  • Refresh Tokens - це облікові дані, що використовуються для отримання токенів доступу. Токени оновлення видаються клієнту сервером авторизації і використовуються для отримання нового маркера доступу, коли поточний маркер доступу стає недійсним або закінчується, або для отримання додаткових маркерів доступу з однаковим або вужчим обсягом.

Тепер, щоб відповісти на ваше запитання про те, чому вам все ще видавали маркер оновлення, а не просто захищали маркер доступу, основною причиною, яку надає робоча група Інженерної інженерії в маркерах Refresh, є:

Існує причина безпеки: refresh_tokenобмін даними здійснюється лише з сервером авторизації, тоді access_tokenяк обмін здійснюється із серверами ресурсів. Це пом'якшує ризик довготривалого витоку маркера доступу_в "токені доступу на годину, з токеном оновлення на рік або доброму до відкликання" проти "маркеру доступу до-анульованому без оновлення маркер ".

Щоб отримати більш детальну та повну інформацію про OAuth 2.0 Flow, спробуйте переглянути такі посилання:


5
Чи повинен маркер оновлення також допомогти отримати новий маркер оновлення?
Герман

5
Чому б просто не придбати новий короткочасний access_token, коли він закінчується? Навіщо мати довговічний refresh_token, якщо все одно потрібно запитати сервер на новий access_token? Або це правда, що з refresh_token мені не потрібно підтримувати живий файл cookie постачальника ідентифікаційних даних, і він видає нові access_tokens на основі refresh_token навіть після того, як cookie вже давно зник, і користувачеві доведеться ввести свої облікові дані, якщо вони хочуть отримати новий маркер_доступу?
JustAMartin

2
@JustAMartin Як клієнту OAuth2, без маркера оновлення, мені потрібно було б знову ініціювати весь потік авторизації (змусити користувача «увійти» і знову дати мені дозволи), щоб отримати інший маркер доступу. Токени оновлення обходять цю вимогу як своєрідний «доказ» того, що я, як Клієнт, вже отримав дозвіл Користувача запитувати маркер доступу.
джраххалі

чи може маркер оновлення мати однакові або ті самі дані, що і маркер доступу? оскільки основне використання токена оновлення полягає в тому, щоб полегшити взаємодію з користувачем та обмежити час доступу хакерів до ресурсу.
DaviesTobi alex

8

@Teyam згадує SO post Чому OAuth v2 має як токени доступу, так і оновлення? але я віддаю перевагу іншій відповіді там: https://stackoverflow.com/a/12885823/254109

TL; DR refresh_token не забезпечує підвищеної безпеки. Це з метою покращення масштабованості та продуктивності. Потім, access_tokenможе зберігатися просто в якомусь швидкому, тимчасовому сховищі (наприклад, пам’яті). Це також дозволяє авторизацію та розділення сервера ресурсів.


3
за винятком того, що є причина безпеки, як згадував @Teyam: "refresh_token обмінюється лише із сервером авторизації, тоді як access_token обмінюється із серверами ресурсів"
huyz,

Це є більш безпечним, якщо ми вважаємо, що сервер авторизації якось краще захищений як сервер ресурсів. Якщо це не так, насправді це менш безпечно. Якщо маркер оновлення порушений, я можу просто використовувати його, щоб отримати новий маркер доступу.
Арно ван Лієшут,

6

"Отже, я не бачу, наскільки це безпечніше, ніж просто дати мені маркер доступу з самого початку і не турбуватися про всю систему Refresh Token". Я боровся з тим самим питанням. Коротка відповідь - маркер оновлення необхідний, щоб переконатися, що термін дії облікових даних не закінчився.

Приклад може допомогти: у мене є база даних, в якій зберігаються ваші медичні записи. Ви погоджуєтесь ділитися своїми медичними картами зі своїм чоловіком. Ваш чоловік / дружина використовує свій маркер доступу для читання ваших записів з моєї бази даних. Через два тижні ваш чоловік знову перевіряє ваші медичні записи, і маркер оновлення використовується, щоб переконатися, що вони все ще мають дозвіл (від сервера автентифікації) на перегляд ваших записів. Маркер оновлення обходить необхідність повторного введення своїх подружніх даних (імені користувача та пароля) на сервер аутентифікації, але він гарантує, що вони все ще мають законний доступ до ресурсу. Токен доступу, який ніколи не закінчується, не знав би, чи ви скасували права вашого подружжя на доступ до вашої медичної картки.


6

Токен оновлення служить принаймні двом цілям. По-перше, маркер оновлення є свого роду «доказом» того, що клієнт OAuth2 вже отримав дозвіл від користувача на доступ до своїх даних, і тому може знову вимагати новий маркер доступу, не вимагаючи від користувача проходження всього потоку OAuth2. По-друге, це допомагає збільшити весь потік безпеки в порівнянні з довговічним маркером доступу. Я торкнусь обох цих пунктів трохи детальніше.

Оновіть маркери як засіб, щоб не дратувати користувача

Поговоримо про першу мету на прикладі. Припустимо, ви, Користувач, використовували веб-програму сторонніх клієнтів, яка хотіла взаємодіяти з даними вашого облікового запису YouTube. Після надання дозволу програмі Клієнт використовувати ваші дані YouTube, чи хочете ви, щоб програма Клієнт попросила вас надати дозвіл зновуколи термін дії його маркера YouTube закінчився? Що станеться, якщо термін дії токена YouTube був дуже низьким, наприклад, 5 хвилин. Було б трохи неприємно, коли б програма клієнта запитувала ваш дозвіл принаймні кожні 5 хвилин! Рішення, яке OAuth2 пропонує для цієї "проблеми", - це маркери оновлення. Використовуючи маркери оновлення, маркер доступу може залишатися недовгим (що бажано на випадок, якщо маркер доступу просочився або якось викрадений), а маркер оновлення може залишатися довгим (er) -живим, що дозволяє Клієнту отримати новий доступ маркер, коли термін дії закінчується, не вимагаючи дозволу користувача (знову).

Але навіщо маркер оновлення? Якщо суть полягає в тому, щоб не прослуховувати користувача з запитами дозволів, то чому Клієнт не може просто сказати "Гей, сервер авторизації, я хочу інший маркер доступу. Зараз!"? Або: "Гей, сервер авторизації, ось мій термін дії минув, дайте мені новий!". Ну, маркер оновлення служить своєрідним "доказом" того, що Клієнт у якийсь початковий момент часу отримав доступ від Користувача. Цей "доказ" має форму маркера оновлення, який цифровим підписом отримує Сервер авторизації. Подання клієнтом маркера оновлення, Сервер авторизації може підтвердити, що Клієнт отримав, колись у минулому, дозвіл від Користувача, і Клієнту не потрібно повторно запитувати Користувача.

Оновити маркер як засіб для підвищення безпеки

Однак це піднімає питання: "Ну, що станеться, якщо маркер оновлення витік або викрадений, або просто зберігається шкідливим клієнтським додатком, який не позбавляється від нього на прохання користувача? Чи не може зловмисник просто продовжувати використовувати маркер оновлення для отримання дійсного маркера доступу на невизначений час (або до закінчення терміну його дії)? Це питання призводить до обговорення другої мети, про яку я вже згадував, маркерів оновлення, що сприяє більш безпечному потоку.

Проблема, яка виникає з маркерами доступу, полягає в тому, що після придбання вони лише колись подаються на Сервер ресурсів (наприклад, YouTube). Отже, якщо маркер доступу викрадений або порушений, як сказати серверу ресурсів не довіряти цьому маркеру? Ну, насправді не можна. Єдиний спосіб зробити це - змінити приватний ключ підписання на сервері авторизації (ключ, який підписав маркер спочатку). Думаю, це незручно робити, а в деяких випадках (наприклад, Auth0) не підтримується.

З іншого боку, токени оновлення потрібно часто представляти на Сервісі авторизації, і тому, якщо такий скомпрометований, то тривіально відкликати або заборонити маркер оновлення в цілому, і не потрібно змінювати будь-які ключі підписання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.