Кажется, что нет четкого стандарта, когда дело доходит до обновления токенов, или, по крайней мере, я до сих пор не смог получить четкое представление о том, как их использовать, из моих чтений. Итак, вот моя предложенная настройка для веб-приложения, и я был бы очень признателен, если бы мое использование токенов обновления могло быть проверено здесь.
Когда пользователь входит в систему, на стороне сервера создается токен доступа (JWT) и токен обновления (еще один JWT). Я храню токен обновления в базе данных и связываю его с этим конкретным пользователем. (Могу ли я использовать Redis вместо этого, чтобы ускорить процесс?) Токен доступа истекает через 15 минут, а токен обновления истекает через 3 часа. У статей, которые я прочитал, токен обновления истекает через несколько дней, но я не понимаю, почему он должен длиться так долго.
Эти токены отправляются обратно клиенту и сохраняются как безопасные файлы cookie только для http.
На все последующие запросы от клиента будет отправлен токен доступа. По истечении срока действия маркера доступа отправьте токен обновления в конечную точку обновления на стороне сервера.
Затем серверная сторона ищет токен обновления в базе данных. Если найденный токен обновления не истек, создайте другой токен доступа и отправьте его клиенту. Если он найден и срок его действия истек, создайте новый токен обновления и замените его в базе данных. Затем создайте токен доступа и отправьте новый токен обновления вместе с новым токеном обратно клиенту. Если токен обновления не найден в базе данных, отправьте 401 несанкционированный обратно.
Как только пользователь выйдет из системы, очистите токен обновления и получите доступ к токену из файлов cookie на стороне клиента. Серверная сторона также удалит токен обновления из базы данных, чтобы его нельзя было использовать для генерации дополнительных токенов доступа.
Это безопасно? Я что-то упустил?
Спасибо!