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

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

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

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

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