Полезно ли хранить токены JWT в памяти? - PullRequest
0 голосов
/ 12 февраля 2020

Я написал asp. net core 3.0 web api, где я использую токены JWT для аутентификации пользователя. Как только пользователь получает токен, он / она может использовать его до истечения срока его действия.

Что я сделал, так это то, что я также сохранил этот токен в памяти при аутентификации, чтобы получить другие минимальные данные, например, имя пользователя, сгенерированный токен at and "token".

  1. Мой первый вопрос: это хорошая практика? поскольку токены не имеют состояния и, следовательно, избавляют серверную часть от хлопот его обслуживания.

  2. Мой второй вопрос заключается в том, что если это допустимо, то как удалить эту информацию токена из в памяти, как только срок действия токена истекает.

  3. Если я не храню этот токен в памяти, как извлечь информацию, например «получить список всех зарегистрированных пользователей».

Ответы [ 2 ]

1 голос
/ 12 февраля 2020
  1. Да, хорошей практикой является кэширование JWT в кэш-памяти, такой как Redis или простой кэш в памяти. Вновь созданные токены кэшируются в памяти с временем извлечения из кэша, равным времени истечения срока действия токена.
  2. Когда поступает запрос на проверку токена, он сначала проверяет, существует ли он в кеше памяти, если не будет просмотрен постоянное хранилище, например, БД.
  3. Когда пользователь делает недействительным токен (ie вышел из системы), его следует удалить из кэша и обновить состояние до недействительного в дБ.

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

В дополнение ко времени истечения токена вы можете добавить дополнительную проверку для проверки, в зависимости от содержимого JWT, например (утверждение Audit, проверка подписи и т. Д. * 1020). *). Для ретроспективного просмотра содержимого токена JWT вы можете использовать инструменты, подобные приведенным ниже

https://devtoolzone.com/decoder/jwt

Cheers, Lakshmanan

1 голос
/ 12 февраля 2020

Когда вы говорите «в памяти», это означает локально на клиентском компьютере или где-то на сервере? Я предполагаю, что вы имеете в виду использование их на стороне клиента.

В настоящее время я использую JWT, поэтому вот мои рекомендации:

1) Сохраните токены в хранилище сеансов. 2) Просто очистите сеанс (или где вы его храните). 3) Вам обязательно нужно где-то хранить его, если вы хотите получить к нему доступ. Но получение списка всех пользователей звучит так, как будто вы хотите получить данные на сервере. Вы можете отслеживать это на внутреннем сервере, но обычно эти токены обрабатываются и сохраняются в базах данных. Но даже на внутреннем сервере вы можете просто иметь массив объектов Client, чтобы отслеживать, какие из них вошли в систему (то есть, какие из них имеют токены с истекшим сроком действия).

Типичная практика заключается в создании двух токенов (токен авторизации). и refre sh token), а затем проверяет их по базе данных, когда пользователь отправляет токен для аутентификации.

...