Проблема управления сеансом с файлами cookie только для http Node.js ,Реагировать

#node.js #reactjs #express #session #session-cookies

#node.js #reactjs #выразить #сессия #сеансовые файлы cookie

Вопрос:

Я просто запутался в управлении сеансами. Для управления сеансами в настоящее время я использую файлы cookie только http для хранения моего JWT, но эти файлы cookie не могут быть доступны всем из-за настроек cookie браузера, которые, я думаю, плохо влияют на пользовательский интерфейс. Поэтому, когда я ищу альтернативные способы, такие как localstorage. Я узнал, что вы недостаточно защищены этими способами. Что бы вы посоветовали мне сделать с проблемой, о которой я упоминал выше? Должен ли я изменить всю систему аутентификации на серверную или какие-либо идеи?

//АУТЕНТИФИКАЦИЯ

 res.cookie('token', token, {
  httpOnly: true,
  secure: true,
  sameSite: 'None',
  maxAge: 7 * 24 * 6 * 604800,
});
 

// ВЫХОД ИЗ СИСТЕМЫ

 res.cookie('token', '', {
  httpOnly: true,
  secure: true,
  sameSite: 'None',
  maxAge: 1,
});
res.clearCookie('token');
 

Ответ №1:

Вы должны использовать httpOnly cookie для предотвращения доступа из JS (с помощью xss attach вы можете запускать JS в сеансе других пользователей).

Мое предложение (которое мы основываем на Окончательном руководстве по обработке JWT на интерфейсных клиентах) состоит в том, чтобы использовать 2 вида токенов:

  1. Токен обновления — хранится в httpOnly файле cookie, используется только для обновления доступа, действителен в течение длительного периода (рекомендуется не более 1 дня).
  2. Токен доступа — хранится в памяти и привязывается к каждому запросу, требующему авторизации. действует в течение короткого периода времени (10 минут).

Идея работает следующим образом:

  1. Пользователь входит в систему, ваш сервер проверяет учетные данные и генерирует httpOnly файл cookie с refreshToken и возвращает в качестве ответа accessToken .
  2. Ваше клиентское приложение повреждает accessToken в каком-либо экземпляре класса (при использовании с Axios ним вы можете прикрепить его в качестве базового заголовка авторизации ко всем запросам).
  3. Когда ваше приложение делает запрос, оно добавляет accessToken в качестве заголовка авторизации, если срок действия accessToken истекает, ваш api вернет 403 UnAuthorized, ваше клиентское приложение отправляет запрос в специальную конечную точку /auth/token с помощью файла cookie HttpOnly, который содержит refreshToken, эта конечная точка проверяет refreshToken и возвращает новый accessToken со временем истечения срока действия в течение 10 минут (с помощью которых ваше клиентское приложение обновляет базовый заголовок авторизации), затем ваше приложение может повторить предыдущий неудачный запрос с новым accessToken.

С помощью этого метода нет доступа к каким-либо токенам извне вашего приложения. Ваш refreshToken js вообще недоступен, а accessToken хранится в памяти, только если в вашем приложении есть какой-то недостаток, он будет раскрыт, и даже если злоумышленник украл его, он действителен только в течение 10 минут (без возможности получить новый, потому что у него нет refreshToken)

Для получения более подробной информации прочитайте статью, которую я добавил.

Комментарии:

1. Спасибо за ваш ответ. Но есть ли часть, которую я пропустил? Файл cookie только для http, который вы называете токеном обновления, не может быть установлен в некоторых браузерах, таких как Safari, без изменения настроек, или некоторые пользователи просто отключают файлы cookie. Иногда даже в процессе выхода из системы вы не можете удалить его из памяти.

2. Вы уверены, что говорите об одних и тех же файлах cookie домена? потому что, если это не работает, это в основном нарушает работу Интернета :]

3. Вы правы, это один из моментов, который я не могу понять, но с кодом, который вы видите выше, файлы cookie не устанавливаются на телефонах или в некоторых браузерах, таких как safari : D

4. Я обнаружил, что если включен параметр Предотвращения межсайтового отслеживания, возникает проблема с моим процессом входа в систему.

5. как следует из названия, межсайтовое отслеживание означает, что вы пытаетесь поместить / использовать cookie из другого домена, «домен» включает поддомены и порты. Он в основном создан для блокировки Google Analytics и подобных инструментов