Задать вопрос
@BashkaMen
C# программист

Как настроить CORS для withCredentials: true?

Здравствуйте, у меня есть апи, в котором есть сессии.
Проблема в том что фронт не получает куки в которых лежит ключ сессии, соответсвенно сессия не работает.

Запросы отправленые с Postman, Swagger - работают.
Запросы с фронта (Angular):
this.http.post('https://webcoin-dev.azurewebsites.net/api/User/signin/'+this.phone, null, { withCredentials: true })
      .subscribe(resp => {})


В Cors я включил все, и выключал по одному, пробовал по разному их крутить.

app.UseCors(s =>
            {
                s.AllowAnyHeader();
                s.AllowAnyMethod();
                s.AllowCredentials();
                s.AllowAnyOrigin();
            });


has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Нагуглил что если есть "AllowCredentials" нужно указывать Origin не "*", а конкретный Host, что я сделал, и ошибка проходила, но фронт все так же не получал куки, и след запрос который читает из куки значение из прошлого запроса, получает пустоту, будто сессия новая.

У меня простая двух-этапная авторизация

1) Ввожу номер телефона, записываю в сессию телефон и код, отправляю код по смс
2) Валидирую код и с этого момента верю что телефон валидный, и человек обладает им - даю токен JWT

Кто сталкивался помогите! Уже все запросы гугла помечены как прочитаны.

Если решения этому не найти мне прийдется сделать эту авторизацию через кеш, причем сторонний кеш ибо будет несколько инстансов приложения. А сессии позволили б отказать от внешнего сервиса для кеша.
  • Вопрос задан
  • 10628 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
AlexXYZ
@AlexXYZ
O Keep Clear O
Кто сталкивался помогите! Уже все запросы гугла помечены как прочитаны.
- это вы должны ещё два дня по ним побегать. ;)
Основной прикол в том, что CORS настраивается не на клиенте, а на сервере, к которому вы хотите обратиться. Пока сайт, который является сторонним по отношению к вашему приложению, не разрешит делать к себе CORS - всё! Никакие настройки CORS в браузере не помогут. Либо делать перезапрос с вашего web-сервера (с backend-а) или идти к тому сайту на поклон, чтобы он включил CORS на адрес вашего сайта. Вроде как вариантов по фен-шую больше и нет.

UPDATE:
Если сторонний сайт является вашим, то почитайте неплохую статью как его настраивать: https://learn.javascript.ru/xhr-crossdomain

UPDATE 01:
Собственно основной прикол, почему сделана такая схема - запросы всегда уходят на сайт с куками и если бы злоумышленник отправлял со своей страницы запрос на тот же https://facebook.com, то он бы мог пользоваться api этого сайта с данными вашего профиля. Ну вам этого бы не очень хотелось? Поэтому эта CORS задаётся именно на сайтах, к которым вы хотите обратиться по CORS и по этой причине он там и отключена.
Ответ написан
dabrahabra
@dabrahabra
.NET Developer
Нагуглил что если есть "AllowCredentials" нужно указывать Origin не "*", а конкретный Host, что я сделал

Об этом и говорится в ошибке и именно это и дожно было её решить - попробуйте ещё раз и скиньте заголовки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы