Лучшая практика использования токена обновления JWT в nodejs

Я использую веб-токены JSON для проверки подлинности в своем приложении-адаптере. Когда пользователь входит в систему, токен создается и отправляется пользователю для хранения в локальном хранилище. Токен действителен в течение 24 часов. Когда сервер (nodejs) вызывается, токен отправляется в заголовке.

Проблема в том, что через 24 часа пользователь должен снова войти в систему. Я не хочу этого, поэтому я начал искать решения. Решение, которое я нашел: обновить токены.

Мой подход пока. Пожалуйста, поправьте меня, если я делаю что-то не так.

1) Пользователь входит в систему. Токен авторизации и токен обновления отправляются пользователю для хранения в локальном хранилище. (Это достаточно безопасно?)

2) Пользователь хочет изменить свой профиль. Я отправляю запрос на сервер с токеном авторизации в шапке.

3) Сервер получает токен авторизации. Если токен аутентификации все еще действителен, делайте все, что нужно. Если срок действия токена истек, проверьте, есть ли у пользователя токен обновления (он все еще действителен). На данный момент я застрял. Должен ли я отправить новый запрос с сервера пользователю с вопросом "у вас есть токен обновления?" и если да, отправьте этот токен обновления на сервер, чтобы создать новый токен аутентификации?

Проблема для меня заключается в следующем:

Допустим, пользователь хочет получить последние 10 сообщений из списка. Запрос с токеном авторизации отправляется на сервер.

=> токен авторизации действителен : ответом является список из 10 сообщений

=> токен аутентификации недействителен : ответ является новым запросом от сервера к клиенту для токена обновления

Это 2 разных ответа. Разве это не испортит мой код на стороне клиента? Как мне справиться с этим?

Альтернативой может быть отправка токена аутентификации И токена обновления в каждом запросе. Но имеет ли это смысл?

Всего 1 ответ


Вы имеете в виду обновить токены как в OAuth2? Если это так, они обычно используются только с серверами клиентов (не приложениями браузера). Использование токена обновления требует аутентификации клиента для получения нового токена доступа, что отличает его от простой отправки токена доступа к ресурсу (который обычно дает доступ сам по себе).

Таким образом, не ясно, что использование токенов обновления добавляет сюда что-нибудь. Если вы считаете, что достаточно безопасно, чтобы люди входили в ваше приложение более 24 часов, почему бы просто не продлить сеанс и продлить срок действия выдаваемого токена?

Что касается хранения, хранение защищенной информации в локальном хранилище обычно не одобряется . Если вы уверены, что у вас нет уязвимого внешнего Javascript, и вы используете очень строгий заголовок Политики безопасности контента на своем сайте, чтобы предотвратить любой встроенный Javascript или нежелательные источники, и ваше приложение не представляет собой очень высокий риск, тогда это может быть в порядке.


Есть идеи?

10000