Подробный разбор авторизации пользователя через JWT API php, react
Делаю алгоритм входа JWT на сайте jwt.io вполне понятно описана суть работы, а в видео туториалах речь идёт про каких-то 2 токена и про совсем другой тип работы. Как я понял второй тип более защищён. Теперь разбираемся. В итоге появляется множество вопросов
Имеем 3 сервера: client server, api server, auth server
Начинается всё с того что мы делаем запрос на Auth сервер, всё что мы ему даём это некий API ключ для идентефикации приложения и массив с данными например логин и пароль, сервер нам возвращает 2 ключа: access_token и refresh_token. Далее вопрос номер 1
Как построены токены? нужен конкретный алгоритм
Понял что access токен мы отсылаем в каждый запрос уже к API серверу а refresh токен сохраняем в localStorage во frontend"е
Насколько я понял у access токена есть время жизни например 15 минут, API сервер вполне может его декодировать и если время вышло мы возвращаем ответ что время жизни access токена вышло. Тогда мы отправляем запрос на Auth сервер и отправляем ему refresh токен, и сервер возвращает нам новую пару токенов refresh и access далее клиент сервер обновляет localStorage и снова отправляет запрос к API?
Подскажите правильно ли я построил суть?
И ещё 1 вопрос где хранить access токен?
Клиент у меня на React, всё остальное на php
Ответы (1 шт):
В токенах могут использовать разные алгоритмы, но по умолчанию чаще всего используется HS256. И еще при получении access_token, с помощью refresh_token, должен возвращаться только access_token, в целях безопасности. А в остальном понимание работы токенов верное, хочу также заметить что в токенах при их генерации на бэкенде, в них можно кодировать информацию (иногда может пригодится).
Хранить access токен лучше всего в глобальном хранилище, чтобы не приходилось его постоянно прокидывать через props. Хорошим решением будет Redux (хороший краткий курс по нему) или Mobx, но только для токена их подключать, это все равно, что из пушки по воробьям стрелять. Так что может сгодиться GlobalContext/GlobalStorage (тут кратко)