Загадочный вызов 401 при использовании AJAX - PullRequest
6 голосов
/ 10 мая 2019

У меня есть веб-приложение .NET Core, размещенное в сети.

Я использую авторизацию на основе утверждений с помощью файлов cookie:

При успешном входе в систему ...

var principal = new ClaimsPrincipal();
var id = new ClaimsIdentity(user);
id.AddClaim(new Claim("ViewData", "Allowed"));
id.AddClaim(new Claim("TenantId", user.TenantId));
principal.AddIdentity(id);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

Все это прекрасно работает для каждого пользователя, кроме одного - однако этот конкретный пользователь (третье лицо) запускает всплывающее окно аутентификации в своем браузере (они пробовали несколько), когда они взаимодействуют с определенной страницей - все остальные страницы работают нормально.

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

Единственное различие между рассматриваемой страницей и любой другой страницей состоит в том, что эта страница отправляет AJAX-сообщение контроллеру, чтобы сохранить некоторые данные. Контроллер Home требует авторизации для просмотра (или редактирования) данных.

[Authorize(Policy = "ViewData")]

Ajax - ваш стандартный материал

Razor:

$.ajax({
  type: 'POST',
  url: '@Url.Action("_Save", "Home")',
  dataType: 'json',
  contentType: 'application/json',
  data: ko.toJSON(viewModel.model()),
  success: function (result) {
  //... callback code etc

Проверка визуализированного JS показывает, что вызов AJAX относится к текущей странице и, следовательно, не идет на какой-то странный URL

Raw JS:

$.ajax({
  type: 'POST',
  url: '/Home/_Save',
  dataType: 'json',
  contentType: 'application/json',
  data: ko.toJSON(viewModel.model()), // ... etc

Я вижу, что cookie включен в заголовки, когда смотрю в браузере:

accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
cache-control: no-cache
content-length: 4775
content-type: application/json
cookie: <cookie details here>

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

Вопрос, который у меня есть, на самом деле является длинным: кажется, это может быть проблема с прокси, но я не понимаю, почему выполнение вызова AJAX отличается от выполнения запроса POST входа в систему, если, конечно, моя настройка AJAX отсутствует некоторые данные аутентификации, которые требуются - может быть, какой-то заголовок?

Кто-нибудь видел что-то подобное раньше?

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Я видел подобные проблемы, и они, как правило, были связаны с настройками безопасности.Вы можете попробовать заглянуть в заголовки CSRF.Это может быть несколько вещей.Это может быть локальный антивирус, встроенный межсетевой экран, антишпионское ПО или другое приложение для обеспечения конфиденциальности / защиты.Поскольку это один пользователь, отладка будет чрезвычайно сложной, и я бы порекомендовал вам выяснить, как настройки / приложения безопасности этого пользователя отличаются от его коллег.

Добавление вашего сайта в список доверенных сайтов в определенныхбраузеры могут решить одну проблему.Там почти наверняка что-то спрятано.

0 голосов
/ 20 мая 2019

Ну, через некоторое время все прояснилось - я думаю, что это, вероятно, связано с сетью.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...