Посилання на дискусію, надане Кеттдевом, має ще один дійсний пункт (оригінал, мертве посилання), зроблений Діком Хардтом, який, на мою думку, варто згадати тут, окрім написаного вище:
Мій пригадування знаків оновлення було для безпеки та відкликання. <...>
відкликання: якщо маркер доступу автономний, авторизацію можна відкликати, не видаючи нові маркери доступу. Ресурсу не потрібно запитувати сервер авторизації, щоб перевірити, чи маркер доступу дійсний. Це спрощує перевірку маркера доступу та полегшує масштабування та підтримку декількох серверів авторизації. Існує вікно часу, коли маркер доступу дійсний, але авторизація відкликана.
Дійсно, у ситуації, коли сервер ресурсів та сервер авторизації є одним і тим же об'єктом, і коли з'єднання між користувачем і будь-яким з них є (як правило) однаково безпечним, немає особливого сенсу тримати маркер оновлення окремо від маркера доступу.
Хоча, як зазначалося в цитаті, ще одна роль оновлення жетонів полягає в тому, щоб забезпечити користувач (будь-коли через веб-інтерфейс у їхніх профілях) маркер доступу може бути відкликаний, зберігаючи систему одночасно масштабованою. .
Як правило, маркери можуть бути або випадковими ідентифікаторами, що вказують на конкретний запис у базі даних Сервера, або вони можуть містити всю інформацію в собі (звичайно, ця інформація повинна бути підписана, наприклад, з MAC ).
Як повинна працювати система з довготривалими маркерами доступу
Сервер дозволяє Клієнту отримати доступ до даних Користувача в межах заздалегідь заданого набору областей, видаючи маркер. Оскільки ми хочемо, щоб маркер відкликався, ми повинні зберігати в базі даних маркер разом із встановленим або знятим прапором "відкликаний" (інакше як би ви це зробили з автономним токеном?) База даних може містити стільки, скільки len(users) x len(registered clients) x len(scopes combination)
записів . Кожен запит API повинен потрапляти в базу даних. Хоча робити запити до такої бази даних, що виконує O (1), досить тривіально, одинична точка відмови сама по собі може мати негативний вплив на масштабованість та продуктивність системи.
Як має працювати система з довготривалим токеном оновлення та маркером короткочасного доступу
Тут ми видаємо два ключі: випадковий маркер оновлення з відповідним записом у базі даних та підписаний автономний маркер доступу, що містить серед інших поле часової позначки терміну дії.
Оскільки маркер доступу є самостійним, нам взагалі не потрібно потрапляти в базу даних, щоб перевірити її дійсність. Все, що нам потрібно зробити, - це розшифрувати маркер і перевірити підпис і мітку часу.
Тим не менш, нам ще належить зберігати базу даних жетонів оновлення, але кількість запитів до цієї бази даних, як правило, визначається тривалістю життя маркера доступу (чим довший термін служби, тим менша швидкість доступу).
Щоб відкликати доступ Клієнта від конкретного Користувача, нам слід позначити відповідний маркер оновлення як "відкликаний" (або видалити його повністю) та припинити видавати нові маркери доступу. Хоча очевидно, що є вікно, під час якого маркер оновлення був відкликаний, але його маркер доступу все ще може бути дійсним.
Компроміси
Токни оновлення частково усувають SPoF (єдину точку відмови) бази даних Token Access, але вони мають деякі очевидні недоліки.
Вікно". Час між подіями "користувач скасовує доступ" та "гарантовано буде скасовано доступ".
Ускладнення логіки Клієнта.
без ознаки оновлення
- надіслати запит API з маркером доступу
- якщо маркер доступу недійсний, відмовтеся і попросіть користувача повторно пройти автентифікацію
з ознакою оновлення
- надіслати запит API з маркером доступу
- Якщо маркер доступу недійсний, спробуйте оновити його за допомогою маркера оновлення
- якщо запит на оновлення пройде, оновіть маркер доступу та повторно надішліть початковий запит API
- Якщо запит на оновлення не вдається, попросіть користувача пройти повторну автентифікацію
Я сподіваюся, що ця відповідь має сенс і допомагає комусь прийняти більш продумане рішення. Хотілося б також зазначити, що деякі відомі постачальники OAuth2, включаючи github та fourrsquare, приймають протокол без оновлення жетонів, і, мабуть, задоволені цим.