Nano Hash - криптовалюты, майнинг, программирование

Удаление 401 несанкционированного ответа, за которым последовали 200 ответов Ok

У меня возникла ситуация, когда большое внутреннее корпоративное веб-приложение, работающее под управлением ASP.NET 3.5 на IIS6, генерирует 401 ответ «Неавторизованный», за которым следует 200 ответов «ОК» (согласно профилю Fiddler). Я знаю, почему это происходит (встроенная аутентификация заставляет браузер повторно отправлять учетные данные), но я ищу некоторые мысли о том, как свести к минимуму или устранить ситуацию. Рассматриваемое приложение работает в глобальной сети, и некоторые пользователи испытывают задержку до 250 мс, поэтому форсирование последующего запроса может заметно повлиять на время загрузки страницы, особенно когда на страницах создается несколько каскадных раскрывающихся списков.

Пользователи приложения являются внутренними в управляемой среде рабочего стола, поэтому механизмы, заставляющие браузер отправлять учетные данные по первому запросу (возможно ли это вообще?), могут быть возможны с точки зрения развертывания. Это будет работать для страниц, требующих идентификации пользователя, но для ресурсов, не требующих аутентификации (WebResource.axd, ScriptResource.axd и некоторые пользовательские веб-сервисы), будет возможна анонимная аутентификация. Я пытался определить это для каждого местоположения в web.config, но результаты были неоднозначными (по-прежнему число ответов 401).

Я был бы признателен за любые рекомендации по «лучшей практике» для решения этой ситуации. Существует множество ресурсов, определяющих проблему, но я не нашел ни одного, предлагающего возможное решение.

Спасибо!

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


  • Какой браузер они используют? Большинство браузеров всегда отправляют базовые учетные данные HTTP-аутентификации. Ответ, вероятно, зависит от браузера. 29.03.2009
  • Браузер IE6, некоторые пользователи сейчас переходят на IE7. 29.03.2009

Ответы:


1

К сожалению, это артефакт схемы аутентификации HTTP NTLM.

Короче говоря, браузер (Internet Explorer или другой) не знает, что ему вообще нужна аутентификация, пока он не получит ответ 401, содержащий заголовок ответа WWW-Authenticate.

В случае с WWW-Authenticate: NTLM, что достаточно раздражает, для завершения требуется два ответа 401 на одном постоянном соединении, и этот процесс необходимо повторить после закрытия постоянного HTTP-соединения. Таким образом, даже если вам удалось заставить браузер инициировать запрос вслепую с попыткой NTLM, по крайней мере один ответ 401 не может быть удален из транзакции.

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

30.04.2009
  • Проверьте настройки IIS. msdn.microsoft.com/en-us/library/aa347472.aspx Вы можете поиграть с этими настройками, чтобы уменьшить число запросов 401. Будьте осторожны при выборе. AuthPersistNonNTLM, authPersistSingleRequest 14.06.2014

  • 2

    CSCRIPT.EXE c:\inetpub\adminscripts\ADSUTIL.VBS SET W3SVC/AuthPersistSingleRequest FALSE

    Значительно уменьшит количество 401-х.

    17.08.2010

    3

    Я считаю, что вы можете убедить Firefox автоматически отправлять учетные данные NTLM в список доменов из белого списка с помощью настроек «about: config» — используйте настройку «network.automatic-ntlm-auth.trusted-uris». Я не пробовал это сам, хотя. Я не уверен, что есть эквивалент для Internet Explorer.

    К сожалению, если вы используете что-то еще, например Kerberos, похоже, нет способа избежать ошибки 401.

    29.03.2009
  • Спасибо, BRH, к сожалению, это зависит от IE6 и 7. 29.03.2009
  • Установка network.automatic-ntlm-auth.trusted-uris, как вы описываете, позволяет Firefox аутентифицироваться, не запрашивая у пользователя учетные данные домена, но это не решает проблему шаблона 401-401-200. Это часть проверки подлинности NTLM, и она будет выполняться всегда, независимо от настроек браузера. 21.08.2012

  • 4

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

    Я предполагаю, что загрузка страницы будет медленной, если у вас есть каскадные раскрывающиеся списки, и ваша начальная загрузка страницы заполняет одно значение, которое заставляет POST получить следующий список, установить это значение, другой POST снова получить следующий список и так далее. Если это так, возможно, вам нужно заполнить все эти раскрывающиеся списки при первом круговом обходе, а не ждать ответов POST.

    01.05.2009

    5

    TL;DR Я поместил информацию заголовка HTTP в тело HTTP

    Мой пример в Angular, но любая TypeScript/JavaScript (фреймворк) может иметь ту же проблему.

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

    ПРОБЛЕМА

      markInstructionAsCompleted(visitScheduleId: string, instructionId: number) {
        return this.http.post(`${environment.apiUrl}/VisitInstructions/schedule/${visitScheduleId}/done/${instructionId}`, this.getHeaderWithAuthorization());
      }
    

    РЕШЕНИЕ, обратите внимание, что к почтовому вызову HTTP добавлен второй аргумент, который равен null

      markInstructionAsCompleted(visitScheduleId: string, instructionId: number) {
        return this.http.post(`${environment.apiUrl}/VisitInstructions/schedule/${visitScheduleId}/done/${instructionId}`, null, this.getHeaderWithAuthorization());
      }
    
    30.04.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..