Как продуктивно использовать JWT в приложении?

Привет. Хочу на максимум использовать возможности Json web token. Появляется ряд вопросов по реализации.

1. Авторизация. При обращении на сервер создается приватный ключ, с его помощью создаю токен, в который записываю время создания, id пользователя и возвращается пользователю. При каждом обращении на сервер токен проверяется.

2. Валидация токена. Вечно юзать токен не получится, потому что если его перехватят, то получат данные к аккаунту. Как лучше решить эту задачу?

Мысли: при каждом обращении к серверу, проверяется токен, при проверки еще проверяется время создания\обновления. Если время к примеру меньше часа, то токен не обновляется. Если больше часа и меньше 2х часов, то время токена обновляется и новый токен отправляется пользователю.

Если такой вариант нормальный, и есть комментарии, дополните пожалуйста, у меня вопрос по времени (допустимым интервалам), не уверен 1-2 часа это нормально.

3. Как сделать кросплатформенную авторизацию? Есть компьютер и телефон. Если мы их не раделяем, то данные в БД переписываются. Так, если пользователь зайдет с мобилки, и он же авторизован с компа, то с компа выкинет юзера.


Мысли: в массив добавлять объект
[{secret: '111', token: 'awdaw', session: 'Android 12 bla bla bla', date: '10-10-10'}]
с сессией пользователя. На UI клиента можно увидеть авторизованные устройства и удалить.
  • Вопрос задан
  • 1395 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. На сервере задаётся ключ (или пара) для шифрации/дешифрации токена. Ключ постоянный.
2. При входе пользователя генерируется пара токенов - основной и для обновления. Токен обновления сохраняется в базе данных в связке с идентификатором пользователя. Срок жизни основного токена от нескольких минут до нескольких часов, токена обновления - от нескольких часов до нескольких дней. Каждый токен содержит идентификатор пользователя и срок жизни токена. Основной токен может содержать дополнительную информацию, например права пользователя, его имя и т.п.
3. При каждом запросе к серверу клиент шлёт основной токен. Если срок действия токена истёк, то сервер возвращает соответствующую ошибку. В этом случае клиент делает запрос на новый токен, пересылая токен обновления. Сервер проверяет наличие токена обновления (неиспользованного, неистёкшего) в базе данных и генерирует новую пару. Старый токен обновления помечается в базе данных как использованный.
5. Если в базе данных токен обновления есть, но помечен как использованный, то считаем, что произошёл перехват токена. В таком случае удаляем все токены клиента из базы.
4. Если в базе токена обновления вообще не нашлось, или он неиспользован, но срок истёк, то требуем от клиента полной аутентификации с логином и паролем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы