Мені довелося розібратися в цьому з моїх власних причин і записати це, тому я опублікую те, що дізнався тут ...
По-перше, я відповім на запитання, ризикуючи вказати очевидне: маркеру ідентифікатора не можна довіряти, і його вміст слід ігнорувати, якщо поточний час перевищує минулий час. У відповіді допитувача зазначено, що після початкової автентифікації користувача маркер ідентифікатора більше не використовується. Однак, оскільки маркер ідентифікатора підписується постачальником ідентифікаційних даних, це, безумовно, може бути корисним у будь-який час дати спосіб надійного визначення, хто користувач, для інших служб, якими може користуватися програма. Використання простого ідентифікатора користувача або адреси електронної пошти не є надійним тому що його можна легко підробити (будь-хто може надіслати електронну адресу або ідентифікатор користувача), але оскільки маркер ідентифікатора OIDC підписаний сервером авторизації (який також зазвичай має перевагу як третя сторона), він не може бути підроблений і є набагато надійніший механізм автентифікації.
Наприклад, мобільний додаток може захотіти повідомити серверну службу, хто користувач використовує програму, і це може знадобитися після короткого періоду після початкової автентифікації, коли термін дії ідентифікатора ID закінчується, і, отже, не може використовуватися для надійної автентифікації користувача.
Отже, подібно до того, як можна оновити маркер доступу (який використовується для авторизації - вказуючи, які дозволи має користувач), чи можете ви оновити маркер ідентифікатора (використовується для автентифікації - вказуючи, хто такий користувач)? Відповідно до специфікації OIDC, відповідь не очевидна. В OIDC / OAuth є три "потоки" для отримання токенів, потік коду авторизації, неявний потік та гібридний потік (який я пропустити нижче, оскільки це варіант двох інших).
Для неявного потоку в OIDC / OAuth ви запитуєте маркер ідентифікатора в кінцевій точці авторизації, перенаправляючи користувача в браузері на кінцеву точку авторизації та включаючи id_token
як значення response_type
параметра запиту. Відповідь на неявний потік успішної автентифікації ПОТРІБНА включати id_token
.
Для потоку коду автентифікації клієнт визначає code
як значення response_type
параметра запиту при перенаправленні користувача на кінцеву точку авторизації. Успішна відповідь включає код авторизації. Клієнтський клієнт робить запит до кінцевої точки маркера з кодом авторизації та, відповідно до Розділу 3.1.3.3 Основного OIDC Успішна відповідь маркера, відповідь ПОВИНЕН включати маркер ідентифікатора .
Отже, для будь-якого потоку спочатку ви отримуєте маркер ідентифікатора, але як його оновити? Розділ 12 OIDC: Використання оновлювальних токенів містить таке твердження щодо відповіді оновленого маркера:
Після успішної перевірки токена оновлення, тілом відповіді є відповідь маркера з розділу 3.1.3.3, за винятком того, що він може не містити id_token .
Він може не містити маркера ідентифікатора, і оскільки не вказано жодного способу, щоб примусити його включати маркер ідентифікатора, ви повинні припустити, що відповідь не буде містити маркер ідентифікатора. Тож технічно не існує певного способу «оновити» маркер ідентифікатора за допомогою маркера оновлення. Тому єдиним способом отримати новий маркер ідентифікатора є повторна авторизація / автентифікація користувача шляхом перенаправлення користувача до кінцевої точки авторизації та запуску неявного потоку або потоку коду автентифікації, як описано вище. Специфікація OIDC дійсно додає prompt
параметр запиту до запиту авторизації, щоб клієнт міг вимагати, щоб сервер авторизації не підказував користувачеві будь-який інтерфейс, але перенаправлення все одно має відбутися.