Set-Cookie для системы входа

Я столкнулся с несколькими проблемами с настройкой файлов 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

Получив запрос OPTIONS, браузер делает фактический запрос POST к API входа. Он возвращает заголовок set-cookie, и в этот момент все выглядит хорошо. Информация заголовка для запроса POST

Проблемы Эта установка приводит к 2 проблемам. Во-первых, хотя файл cookie nuser не является httpOnly, я, похоже, не могу получить к нему доступ через JavaScript. Я могу видеть nuser в меню параметров файлов cookie моего браузера, но document.cookie дает «».

Во-вторых, кажется, что браузер размещает заголовок запроса Cookie только в запросах к одному и тому же API (API входа): enter

Но если я сделаю запрос к другому API, который все еще находится на моем локальном сервере, заголовок cookie отсутствует:   введите описание изображения здесь О, и это возвращает 406 только потому, что мой сервер в настоящее время настроен на это, если пользователь не проверен. Я знаю, что это, вероятно, должно быть 403, но на этом изображении следует сосредоточиться на том факте, что заголовок «cookie» не включен в заголовки запроса.

Итак, я объяснил свою реализацию, основываясь на моем текущем понимании файлов cookie, но я явно что-то упускаю. Было бы очень полезно опубликовать, как именно должны выглядеть заголовки запроса и ответа для каждой задачи. Спасибо.


person jaxoncreed    schedule 10.03.2015    source источник


Ответы (1)


Хорошо, все еще не совсем то, что вызывало проблему в этом конкретном случае, но я обновил свой сервер localhost: 80, чтобы он принимал запросы API, а затем сделал последующий запрос на localhost: 8080, чтобы получить правильную информацию. Поскольку заголовок set-cookie устанавливается с помощью localhost:80 (источник клиента), все работает нормально. Из того, что я читал раньше, я думал, что порты не имеют значения, но, видимо, они имеют значение.

person jaxoncreed    schedule 14.03.2015