Отмена JWT без истечения срока действия - PullRequest
0 голосов
/ 10 ноября 2018

Я ищу использование аутентификации на основе токенов для мобильного приложения, которое позволяет пользователям входить в систему, пока они не вышли из системы. Мой подход заключается в создании токена обновления JWT, когда пользователь входит в систему / регистрируется; Этот токен не имеет срока действия и продолжает обновлять 20-минутные токены доступа.

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

Должен ли я беспокоиться об этом или Redis эффективно использует память в этом отношении? Есть ли лучший способ отозвать JWT без истечения срока действия?

1 Ответ

0 голосов
/ 11 ноября 2018

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

Проблема здесь в том, что вы доверяете самому токену обновления, потому что это JWT. Вы должны доверять серверу. Не потому, что JWT нельзя доверять, а потому, что токен обновления не обязательно должен быть JWT.

Сохранение токенов обновления в памяти, включая срок действия. Вы можете удалить просроченные токены из памяти. Это означает, что только токены, которые существуют в памяти, могут использоваться для запроса нового токена доступа. И чтобы быть в безопасности, используйте только одноразовые токены обновления.

Поток будет примерно таким:

  1. пользователь входит в систему, получает токен доступа JWT (5 минут) и код токена обновления 1 (48 часов). Токен обновления 1 сохраняется на сервере.
  2. пять минут спустя: срок действия маркера доступа истекает
  3. запрашивается новый токен доступа с использованием токена обновления 1.
  4. пользователь получает новый токен доступа (5 минут) И код токена обновления 2 (48 часов). Токен 1 удален из памяти, а токен 2 добавлен в память.
  5. и это продолжается в течение нескольких часов.
  6. В течение двух дней пользователь не использует приложение
  7. 50 часов спустя: поскольку срок действия обоих токенов истек, пользователь должен снова войти в систему. Сброс потока.

При выходе удалить токен обновления из памяти. И если тем временем вы хотите отозвать доступ. Просто удалите токен обновления из памяти. В течение 5 минут пользователю необходимо снова войти в систему.

...