@smoyke
HTML программист

Как сделать безопасную авторизацию с помощью JWT?

Занимаюсь созданием REST API на node.js + express + mysql для vue приложения. Сделал авторизацию с помощью passport с jwt стратегией. Как всегда сначала думал, что все легко и просто, потом начал изучать как и где безопасно хранить токен, и понял, что все сложно)). В общем я немного запутался уже, везде пишут, что токен могут украсть и делать запросы к api используя токен, рефреш токен так же могут увести и получить вообще бесконечные токены. Но я вот подумал(возможно не прав): пользователь ввел имя и пароль, приложение(vue) отправляет эти данные и в ответ получает токен, этот токен сохраняется в куках(например) и при последующих запросах берется из куков и добавляется к запросу. Следовательно все запросы к API будут идти с одного ip(на котором висит сам сайт), и тогда в api я могу(наверно) проверять с какого ip пришел запрос и если ip не моего сервера на котором висит сайт, то запрос не выполнять. Или я не прав? И еще не понял, как сделать токен не валидным принудительно? Допустим увели токен, как я могу его сделать не валидным? Нужно ли где-то хранить список всех выданных токенов? Как я понял, что бы использовать рефреш токен я должен генерировать два токена с разным временем жизни и оба их отдавать юзеру, да? Какое время жизни лучше делать для access токена, а какое для refresh? В общем вопросов много) помогите разобраться пожалуйста). Хочется сделать нормальную авторизацию, что бы пользователям не приходилось часто вводить логин и пароль, как в vk.com например, один раз ввел и забыл.
  • Вопрос задан
  • 3078 просмотров
Решения вопроса 1
@akass
Developer
https://gist.github.com/zmts/802dc9c3510d79fd40f9d...
Отдаешь два токена и время жизни access token, которое обычно минут 30.
Соответственно если угоняют access, то он стухнет через пол часа, а если угонят оба, то юзер не сможет обновить по реврешу, его кинет на перелогин и тогда у угонщика все стухнет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@mykmykpet
JWT не про аутентификацию. Это авторизация.
Аутентификация — это логин, пароль, код в смс или приложении, смарт-карта, отпечаток пальца, сетчатки, фейс-айди и др.
Ответ написан
@PxlFxr
Плюсу первый коммент. Еще для ноды юзаю простую реализацию jwt https://www.npmjs.com/package/jwt-simple
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Junto Москва
от 90 000 до 120 000 руб.
от 200 000 до 250 000 руб.
Zeus Capital Москва
от 40 000 до 90 000 руб.
13 дек. 2019, в 10:53
1000 руб./за проект
13 дек. 2019, в 09:20
2500 руб./за проект