Задать вопрос
mattedev
@mattedev
web developer

Правильно ли я понял, как работает токен?

пишу rest api. У всех пользователей есть уникальный токен. С мобильного приложения я отправляю логин и пароль на сервер api. После если все верно я отдаю клиенту этот уникальный токен, и как мобильное приложение spa, сохраняю его в документе. И все запросы делаю через этот токен, на сервере проверяю, если такой существует, отдаю данные.
  • Вопрос задан
  • 4525 просмотров
Подписаться 30 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Да. Все верно.

Единственное что добавлю, пересылать токен лучше в заголовках. Причем желательно, поскольку механизм аутентификации нестандартный, в заголовке X-Authorization. Если вы решите хранить токен в куках и передавать его, это желательно должны быть http-only куки (хотя в случае JWT не обязательно) и на сервере должна быть защита от CSRF атак.

Так же поскольку у нас по сети гуляют по сути креденшелы, важно использовать SSL. Благо сегодня есть lets-encrypt что бы бесплатно получить сертификаты.

И последнее, что бы обезопасить себя еще, используйте refresh-токены. То есть наш уникальный токен который гуляет в каждом запросе будет иметь ограничение по времени жизни (скажем 5 минут) и для его обновления мы будем использовать refresh-токен. При получении refresh токена клиенту уходит новая пара токен + refresh-токен.

Таким образом у злоумышленника который перехватил токен пользователя будет окно всего в 5 минут что бы что-то сделать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Я мимо проходил и, вроде, все верно, кроме:
С мобильного приложения я отправляю логин и пароль на сервер api.
Никогда! Слышишь, Карл?! НИКОГДА НЕ ПЕРЕСЫЛАЙ данные авторизации на сервер БЕЗ ПРЕДВАРИТЕЛЬНОГО ХЕШИРОВАНИЯ на стороне клиента серверным ключом.

1. Данные на клиенте: hash(USER1:PASSWORD:SKEY:RANDOM),
2. Пересылаю на сервер: ab1e37ab50c61d8c80fb5cb4b1e3122f:RANDOM
3. Ищу на сервере совпадение:
ab1e37ab50c61d8c80fb5cb4b1e3122f===hash(USER:PASSWORD:SKEY:RANDOM) и получаю учётку пользователя, если все верно.

А так, да! Спасибо, Сергей Протько - все довольно четко и верно написано!
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы