Тема: Зберігання JWT в браузері

Всім привіт.

Розбираюсь з роботою авторизації в Blazor web asm, а саме використання JWT. В цілому основні моменти зрозуміли: отримуємо токен, потім підставляємо його в заголовок кожного запиту. Для роботи авторизації на стороні клієнта реалізував AuthenticationStateProvider, який дивиться токен и по ньому будує AuthenticationState.

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

На початку здавалось що кукіси більш безпечний варіант, але поміркувавши зрозумів що при доступі атакуючої сторони до js на сторінці вона може як зчитати сторедж, так і надіслати refresh запит з кукісами. Тобто явної переваги у жодного з методів по суті немає.

А от проблем використання наче більше з варіантом локальна змінна + кукіси. Наприклад я авторизуюсь, відкриваю копію сторінки, виходжу з аккаунту, заходжу під іншим. На першій сторінці в змінній все ще старий JWT, причому він може бути все ще валідним.

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

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