Управление jwt из nodejs во внешнем интерфейсе

#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 значение.