Я столкнулся с несколькими проблемами с настройкой файлов cookie, и, судя по тому, что я прочитал, это должно работать, поэтому я, вероятно, упускаю что-то важное.
Эта ситуация:
Раньше я получал ответы от своего API и использовал JavaScript для их сохранения в виде файлов cookie, но затем обнаружил, что во многих ситуациях использование заголовка ответа set-cookie более безопасно.
У меня есть 2 файла cookie: «nuser» (содержит имя пользователя) и ключ (содержит сеансовый ключ). nuser не должен быть httpOnly, чтобы JavaScript мог получить к нему доступ. Ключ должен быть httpOnly, чтобы мошеннические скрипты не могли украсть сеанс пользователя. Кроме того, любой запрос от клиента к моему API должен содержать файлы cookie.
Запрос на вход
Вот моя текущая реализация: я делаю запрос к своему API входа в систему по адресу localhost: 8080/login/login (имейте в виду, что веб-клиент размещен на локальном хосте: 80, но, исходя из того, что я прочитал, номера портов не должны не имеет значения для файлов cookie)
Сначала веб-браузер сделает запрос OPTIONS, чтобы подтвердить, что все заголовки разрешены. Я убедился, что ответ сервера включает учетные данные контроля доступа, чтобы предупредить браузер о том, что можно хранить файлы cookie.
Получив запрос OPTIONS, браузер делает фактический запрос POST к API входа. Он возвращает заголовок set-cookie, и в этот момент все выглядит хорошо.
Проблемы Эта установка приводит к 2 проблемам. Во-первых, хотя файл cookie nuser не является httpOnly, я, похоже, не могу получить к нему доступ через JavaScript. Я могу видеть nuser в меню параметров файлов cookie моего браузера, но document.cookie дает «».
Во-вторых, кажется, что браузер размещает заголовок запроса Cookie только в запросах к одному и тому же API (API входа):
Но если я сделаю запрос к другому API, который все еще находится на моем локальном сервере, заголовок cookie отсутствует: О, и это возвращает 406 только потому, что мой сервер в настоящее время настроен на это, если пользователь не проверен. Я знаю, что это, вероятно, должно быть 403, но на этом изображении следует сосредоточиться на том факте, что заголовок «cookie» не включен в заголовки запроса.
Итак, я объяснил свою реализацию, основываясь на моем текущем понимании файлов cookie, но я явно что-то упускаю. Было бы очень полезно опубликовать, как именно должны выглядеть заголовки запроса и ответа для каждой задачи. Спасибо.