#javascript #node.js #jwt
#javascript #node.js #jwt
Вопрос:
У меня есть приложение, которое использует аутентификацию jwt, поэтому у меня есть api /login
, где я генерирую jwt, например:
res.cookie('Authorization', 'Bearer ' token, {httOnly: true});
Когда я вхожу во внешний интерфейс, в react js сервер генерирует токен jwt.
Вопросы:
Как управлять jwt во внешнем интерфейсе после входа в систему? (теперь токен отправляется в cookie, и я не могу прочитать его с помощью javascript), и когда я перехожу на другой маршрут после входа в систему, я должен отправить обратно из внешнего интерфейса токен, но он находится только на /login
странице, а не на втором маршруте. Теперь я могу обрабатывать токены с помощью localStorage, но это небезопасно. Итак, как в моей ситуации отправить токен обратно, если я перейду после входа на другую страницу?
Комментарии:
1. лучше всего сохранить jwt в localstorage после входа в систему и сохранять только общедоступные данные, которые не повредят, если кто-то получит и отправит их в заголовке auth в каждом запросе для аутентификации пользователя и истечения срока действия токена через некоторое время
2. Что заставляет вас предполагать, что localstorage небезопасен?
3. Ваша страница входа в систему находится в другом домене, чем ваше приложение? В противном случае файл cookie должен отправляться с каждым запросом просто отлично, без каких-либо дополнительных усилий со стороны внешнего интерфейса.
Ответ №1:
Если вы не переключаете домены, а путь к файлу cookie является глобальным, вы можете получить к нему доступ с любой страницы во внешнем интерфейсе. Смотрите: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
Кроме того, я бы дважды подумал, прежде чем использовать файлы cookie. Я бы предложил использовать недолговечные токены (30 минут) с refreshTokens
(30 минут) localStorage
и отправлять их, используя стандартный Authorization
заголовок, и не беспокоиться о том, что кто-то их украдет. (Просто не храните там конфиденциальные данные). Токен обновления будет периодически требовать новой пары токен / обновление, прежде чем истечет время.
Существует также sessionStorage
, если вы не хотите сохранять данные в течение длительного времени: https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage с той хитростью, что каждая вкладка / окно имеет отдельное sessionStorage
значение.