Я использую Экспресс-сессия cookie для аутентификации, которая, если я правильно понимаю, работает путем сохранения файла cookie локально в браузере пользователя и данных сеанса нет на стороне клиента.
В документации сказано, что для выхода из системы мы должны установить req.session = null
на сервере. Итак, прямо сейчас мой клиент выполняет HTTP-запрос к этой конечной точке.
Клиент:
async function logout() {
await fetch(
process.env.REACT_APP_SERVER_URL + "/logout",
{
method: "POST",
}
)
}
Сервер:
exports.logout = (req, res, next) => {
req.session = null
res.sendStatus(200)
}
Но это, очевидно, может потерпеть неудачу, если сервер не работает. Так что теперь мне интересно, хватит ли просто удалите файл cookie сеанса на стороне клиента и даже полностью удалите конечную точку выхода. Если на сервере не хранятся данные сеанса, это должно работать так же хорошо и не оставлять следов, верно?
Да, это правильно, вы можете просто удалить файл cookie, и в следующий раз, когда клиент попадет на сервер, не будет сеанса для идентификации пользователя, поэтому пользователь выйдет из системы.
Однако, как правило, клиентская сторона не должна иметь возможности работать с файлом cookie сеанса из соображений безопасности, и почти всегда файл cookie сеанса помечен как httpOnly
, что означает, что им нельзя манипулировать с помощью javascript на стороне клиента.
Одна дополнительная мера предосторожности, которую вы можете принять (если вы решите позволить клиенту работать с файлом cookie сеанса), — это sign
файл cookie, поэтому, даже если клиент изменит содержимое файла cookie, подпись файла cookie не будет действительной и будет отклонена сервер.
Интересно, что расширения Chrome могут получать доступ к httpOnly
файлам cookie через Chrome Cookie API. Однако мое приложение React не может.
Да, «секрет» — это ключ, который используется для подписи файла cookie. Если вы хотите продолжить свой первоначальный план, то sign
куки и не отмечайте их httpOnly
Вы знаете, почему расширениям Chrome разрешен доступ к httpOnly
файлам cookie через Cookie API? Я использую эту функцию в своем расширении, и там я могу удаляю (и запрашиваю) файл cookie. developer.chrome.com/docs/extensions/reference/cookies
Расширение Chrome может получить доступ ко всем файлам cookie: developer.chrome.com/docs/extensions/reference/cookies.
Да, мне просто интересно, почему. Я думал, что JavaScript не может получить к ним доступ из соображений безопасности. Тогда почему расширения не имеют этого ограничения? Может быть, потому что они должны быть явно установлены.
Спасибо за ваш ответ. Мой файл cookie сеанса помечен
httpOnly
, и кажется, что клиент не может получить к нему доступ (и, следовательно, не может удалить его локально). Это правильно? Кроме того, экспресс-сессия cookie использует «секрет». Это та самая подпись, о которой вы говорите?