Настройка файлов cookie, когда для CORS Access-Control-Allow-Origin установлено значение (*) - PullRequest
0 голосов
/ 10 июля 2019

Я создаю API с Node.js и Express, чтобы пользователи могли получить к нему доступ через вызовы API, а также выступать в качестве RESTFUL-сервера для моего веб-приложения (React.js).

По этой причине я установил для CORS Access-Control-Allow-Origin подстановочный знак (*), так как к нему должен быть доступ из внешних источников.

В настоящее время API работаетна локальном хосте: 8000, а веб-приложение работает на локальном хосте: 3000.

Теперь я хочу установить файл cookie при обращении к моей конечной точке /login.Файл cookie не используется для аутентификации, поэтому я не беспокоюсь о CSRF.

Я устанавливаю cookie следующим образом:

res.cookie('token', 'value', {httpOnly:true});

При использовании Postman файл cookie устанавливается без проблем, однако при попытке доступа к нему через веб-приложение через браузер файл cookieне устанавливается.

После прочтения нескольких сообщений о переполнении стека я понимаю, что мне нужно установить credentials: include при выполнении операции выборки из моего веб-приложения.

Проблема заключается в том, что этоне допускается в браузерах, если для Access-Control-Allow-Origin установлено значение (*).

Есть ли способ установить cookie в браузере при этих условиях?

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

https://security.stackexchange.com/questions/198714/access-control-allow-origin-wildcard-doesnt-allow-sending-session-cookies Посмотрите этот ответ на stackexchange по некоторым причинам этого, но в основном нет, вы не можете.

Если вам нужен API с учетными данными, вы также должны знать все возможные источники, которые могут получить эти учетные данные.Задайте значение разрешения источника для вашего локального хоста и / или сервера разработки, а также ваш конечный производственный адрес, как описано ниже.

Я предполагаю, что вы используете пакет cors на вашем сервере NodeJS.

Он также должен быть настроен на прием файлов cookie.В случае Express Server это будет выглядеть примерно так.

app.use(cors({
    origin:["http://localhost:3000"],
    credentials:true
}));

Кроме того, как вы правильно сказали, вы отправляете учетные данные вместе с любыми вызовами на стороне пользовательского интерфейса в API.

0 голосов
/ 10 июля 2019

Я справился с этим (я использую пакет cors из NPM):

app.use(cors({
    origin:true,
    credentials:true
}));

Согласно документам :

origin: Конфигурирует заголовок CORS Access-Control-Allow-Origin. Возможные значения:

Boolean - set origin to true to reflect the request origin, as defined by req.header('Origin'), or set it to false to disable CORS.

Это делает так, чтобы cors по существу принимал любое происхождение на основе заголовка запроса, а также позволяет устанавливать куки.

...