Идентификатор сеанса меняется на каждом CORS POST, несмотря на учетные данные = 'include' - PullRequest
0 голосов
/ 07 января 2019

Я бы хотел подключить свой интерфейсный веб-сайт через CORS к своему внутреннему API, который использует простую аутентификацию (имя и пароль) для авторизации пользователей. Для этого я использую Javascripts Fetch API. Похоже, что идентификатор сеанса каждого вызова выборки изменяется, хотя я использую credentials = "initial":

function onClick() {
  const url = 'https://localhost:44394/api/account/Login/Standard/P@$$w0rd';
  fetch(url, {
    method: 'POST',
    credentials: 'include',
    mode: 'cors'
  }).then(function (response) {
      return response.text().then(function (text) {
      document.getElementById("at").innerHTML = text;
    });
  });
}

Я добавил следующее к Configure() моего AspNetCore-Startup.cs:

app.UseCors(builder=>builder.AllowAnyOrigin().AllowCredentials().AllowAnyMethod().AllowAnyHeader());

И ConfigureServices() моего AspNetCore-Startup.cs:

services.AddCors();

Я не могу войти с помощью функции onClick(). Когда я использую credentials: "same-origin" вместо include, я могу войти в систему, но следующий вызов API изменит идентификатор сеанса вызова.

Как я могу запретить Fetch Call изменять идентификатор сеанса?

EDIT: В моем контроллере аккаунта я получаю доступ к текущему идентификатору сессии через HttpContext.Session Может быть, это что-то вроде сеанса сервера, а не сеанса запрашивающей стороны?

1 Ответ

0 голосов
/ 07 января 2019

Session Cookies не имеют ничего общего с CORS. CORS - это запросы к другим доменам.

Сеанс - это «некоторые данные», хранящиеся на сервере и идентифицируемые по идентификатору, сохраненному в вашем браузере как cookie.

  • Сеанс инициализации: сервер устанавливает cookie в браузере (см. Заголовки ответа)
  • Следующие запросы: браузер отправляет куки на сервер (чтобы наш сервер знал, какие данные использовать)

Зная это, легко отладить проблему:

  1. Ваш сервер должен отправить исходный файл cookie. Есть ли файл cookie в заголовках ответа?
  2. Можете ли вы увидеть куки в вашем браузере?
  3. Отправляет ли клиент этот файл cookie со всеми запросами?

Вы можете увидеть это в ваших инструментах разработчика браузеров> сетевая панель.

Может быть, это что-то вроде сеанса сервера, а не сеанса запрашивающего?

Это всегда и только сеанс сервера. Ваш браузер просто сообщает серверу, какой сеанс (данные) использовать.

Ваш вопрос не содержит подробностей о том, что происходит, поэтому я должен предположить: GDPR может помешать ядру asp установить cookie сессии.

Документация: https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.2

    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => false;
        ...
    });

Может работать как "быстрое и грязное" решение.

...