Ошибка HTTP 401.2 при использовании шлюза приложений Azure

У меня есть сайт ASP.Net, размещенный в IIS 10 в центре обработки данных Windows Server 2019 в Azure. На этом сайте включена только проверка подлинности Windows.

Когда я захожу на сайт напрямую (http://mysite-backend.example.com), мне запрашивают учетные данные, после чего все работает как положено. Когда я захожу на сайт через шлюз приложений (настроенный с частным IP-адресом) (https://mysite.example.com), мне предлагается ввести учетные данные, после чего мне снова предлагается запросить дополнительные ресурсы (размещенные на том же сервере). site, без каких-либо специальных правил для каких-либо подпапок). Мне неоднократно выдается запрос, пока я не нажму «Отмена», и в этот момент я увижу 401 для запроса ресурса в журнале сети Chrome.

Одним из ресурсов, с которыми я сталкиваюсь с этой проблемой, является запрос GET для. Если я обращаюсь к ресурсу напрямую ( https://mysite.example.com/favicon.png ), все работает, но когда я обращаюсь к странице сайта, вызывая запрос на отправку этого ресурса браузером как часть ресурсов страницы, Я вижу ошибку. Это подразумевает, что ресурс доступен; но что-то в том, как это обрабатывается в «транзакции», вызывает проблемы.

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

Внутренний пул имеет только 1 узел. В настройках серверной части указано, что нужно использовать имя хоста внутреннего пула вместо имени внешнего интерфейса, поэтому с точки зрения веб-сервера запросы выглядят одинаково.

В журнале событий безопасности веб-сервера я вижу неудачные попытки входа в систему (идентификатор события) с моим тестовым именем пользователя; подтверждение того, что запрос поступает на внутренний сервер с правильным именем пользователя (и я очень внимательно следил за тем, чтобы последовательно вводить правильный пароль/делал это много раз, чтобы исключить вероятность человеческой ошибки/пробовал оба варианта) используя, а также перезаписывая сохраненный пароль). Если я попытаюсь слишком много раз, моя тестовая учетная запись будет заблокирована (т. е. в ADатрибут установлен на); после чего все запросы получают 401 ответ (по понятным причинам).

Я проверил журналы App Gateway и убедился, что он ничего не блокирует. Я также установил специальное правило WAF для этого сайта и установил для него значениережим, гарантирующий, что он не сможет блокировать запросы; на всякий случай что-то было заблокировано, но не зарегистрировано.

Я включил отслеживание неудачных запросов для статуса 401 на внутреннем сервере; это показывает, что 401 исходит из:

      -MODULE_SET_RESPONSE_ERROR_STATUS 

ModuleName: IIS Web Core 
Notification: AUTHENTICATE_REQUEST 
HttpStatus: 401 
HttpReason: Unauthorized 
HttpSubStatus: 2 
ErrorCode: Access is denied. (0x80070005) 
ConfigExceptionInfo

Примечание. Ресурсы, которые заблокированы (т. е. получают 401 ответ), обычно совпадают, когда я тестирую на одном и том же устройстве в течение определенного периода времени; но если я протестирую в другой день или на другом устройстве, я могу увидеть блокировку разных ресурсов. Когда я впервые тестирую на любом устройстве (в основном), я вижу два xhrзапросы настраницы терпят неудачу, то после нескольких тестов на этом устройстве другие ресурсы кажутся испорченными. Кажется, что они являются основной причиной, но что-то потом вызывает проблемы с сеансом.

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

А пока любые идеи, которые могут возникнуть у кого-либо здесь, будут очень признательны... Заранее спасибо.


Обновление: прямой вызов конечной точки поиска также приводит к ответу HTTP 200/действительный:

$resp = Invoke-RestMethod -Method Post -Uri 'https://mySite.example.com/subfolder###/Search' -Form @{recordsToTake=25;recordsToSkip=0;sortColumn='CategorieName';sortDirection='Ascending'} -Credential $cred -StatusCodeVariable sc;"Status $sc";$resp

0 ответов

Другие вопросы по тегам