#reactjs #api #express #authentication #session
#reactjs #API #экспресс #аутентификация #сеанс
Вопрос:
Я создаю универсальное веб-приложение, используя react.js . Я использую express для рендеринга сервера, и есть другой server-side api server
, который доставляет объект json из базы данных.
поэтому, когда мой клиент react извлекает api для входа или регистрации, сервер api создает токен jwt и устанавливает cookie в Set-Cookie
заголовке ответа с параметрами HttpOnly, которые предотвращают возникновение проблемы безопасности XSS.
после ответа сервера api я смог найти cookie на application
вкладке в инспекторе Google Chrome.
Здесь начинается моя проблема. из-за опции HttpOnly клиент не может прочитать document.cookie, поэтому нет способов убедить проверить, что сеанс действителен при каждом обновлении страницы.
как я могу с этим справиться?
наивный подход может заключаться в удалении параметров HttpOnly из ответа, но может привести к другим проблемам плохой безопасности.
Комментарии:
1. Поскольку у вас есть файл cookie в клиенте как HttpOnly, я считаю, что теперь нет необходимости использовать
document.cookie
. Разве весь смысл обработки сеанса сервера не в том, чтобы сервер обрабатывал ваш сеанс?2. да, сервер api обрабатывает cookie, что означает, что сервер api ответственен за создание cookie и отправку его клиенту через http заголовок
Set-Cookie
, но клиенту все равно нужно проверять, существует cookie или нет при каждом обновлении страницы.
Ответ №1:
Из того, что я понимаю из вашего вопроса, вы хотите, чтобы ваше приложение React проверяло, существует ли файл cookie, и, насколько мне известно, к сожалению, это никогда не может быть сделано, пока этот файл cookie является файлом cookie HttpOnly, потому что, если бы это было возможно, это привело бы к тому, что файл cookie сеанса сервера был помечен как HttpOnly.
Обратите внимание на следующее о файлах cookie HttpOnly
An HttpOnly cookie is not accessible via non-HTTP methods, such as calls via JavaScript (e.g"document.cookie")
Итак, каково решение узнать, есть ли у пользователя файл cookie сеанса
-
Таким образом, маршруты, требующие входа пользователя в систему, вы можете создать промежуточное программное обеспечение на своем сервере, посредством которого оно сначала проверяет cookie, предоставленный клиентом, и, если это допустимый cookie, вы можете затем отправить их на вызываемый маршрут.
-
И допустим, срок действия пользовательского файла cookie истек, тогда, безусловно, файл cookie не будет храниться в хранилище файлов cookie, и при отправке запроса файл cookie не будет отправлен, и ваша проверка промежуточного программного обеспечения, упомянутая выше, отлично справится с этим, и тогда вы сможете управлять всем
Комментарии:
1. если есть какой-то момент, который мне не ясен, я действительно ценю ваш ответ. Спасибо