2012-05-31 2 views
1

Общая информацияОшибка HTTP 401.1 при использовании WinHttp.WinHttpRequest.5.1 в классическом ASP сайте

Операционная система: Windows Server 2003 R2 с пакетом обновления 2

Вебсервер: IIS 6

NTAuthenticationProviders: только NTLM

WebApplication: Классический ASP

Браузеры используется: IE7, IE8, IE9

Там это веб-приложение Классический ASP называется База знаний, в пределах веб-сайта IIS называется eblcplaza как так: eblcplaza/база знаний /.

eblcplaza имеет анонимный доступ и включена Интегрированная проверка подлинности Windows. База знаний имеет анонимный доступ отключен, а встроенная проверка подлинности Windows включена

База знаний это приложение Классический ASP имеет свой собственный пул приложений, который работает под предопределенный Удостоверение пула приложений «Сетевой сервис»

Когда я вошел в с моим Учетная запись NT Я могу получить доступ к любой странице, которую я хочу просто отлично. Проблема заключается в компоненте WinHttp.WinHttpRequest.5.1. Он используется в некоторых частях базы знаний для выполнения запроса на стороне сервера для извлечения содержимого из некоторых сценариев .asp, которые находятся в веб-приложении.

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

Пример запроса с использованием WinHttpRequest:

set WinHTTPRequest = Server.CreateObject("WinHttp.WinHttpRequest.5.1") 

WinHTTPRequest.SetTimeouts 20000, 20000, 20000, 20000 

call WinHTTPRequest.Open("POST", someUrlToAspScript, false) 

WinHTTPRequest.SetAutoLogonPolicy 0     

WinHTTPRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 

WinHTTPRequest.Send strQueryString 

Response.Write(WinHTTPRequest.ResponseText) 

С SetAutoLoginPolicy установлен в 0, я получаю следующее сообщение об ошибке на страницах, где WinHttpRequest используется:

У вас нет прав для просмотра этот каталог или страницу, используя предоставленные вами учетные данные. Ошибка HTTP 401.1 - Неавторизованный: доступ запрещен из-за недопустимых учетных данных. Internet Information Services (IIS)

С SetAutoLoginPolicy установлен в 2 (Не автоматически отправлять учетные данные в соответствии с MSDN), я получаю следующее сообщение об ошибке на страницах, где используется WinHttpRequest:

Вы делаете не имеют разрешения на просмотр этого каталога или страницы, используя предоставленные вами учетные данные, поскольку ваш веб-браузер отправляет поле заголовка WWW-Authenticate, которое веб-сервер не настроен для принятия. Ошибка HTTP 401.2 - Неавторизованный: доступ запрещен из-за конфигурации сервера.

Я знаю, что моя учетная запись пользователя NT имеет соответствующие права на доступ к этим ресурсам.asp, а также учетная запись Network Service.

Я попытался выяснить, что может быть проблемой в течение нескольких дней, попытался настроить NTAuthenticationProviders только на NTLM, и как Negotiate, так и NTLM среди других вещей, но пока ничего не работало.

Пожалуйста, помогите мне, Он начинает сводить меня с ума.

С уважением,

Барт

+0

Вы делаете запрос из myWebApp на другую страницу в myWebApp? Ваше использование терминов myWebSite и myWebApp запутывает, пожалуйста, отредактируйте, чтобы дать двум приложениям более отличительные имена. – AnthonyWJones

+0

AnthonyWJones, да, это правильно. Я внес изменения, которые вы просили. –

+0

, вы еще не завершили редактирование, есть ссылки на myWebApplication и веб-приложение. Я собираюсь предположить, что в этих точках вы ссылаетесь на базу знаний. Поэтому вы запрашиваете страницу asp внутри базы знаний, чтобы сделать запрос HTTP также к базе знаний. – AnthonyWJones

ответ

0

Я предполагаю, что страницы в базе знаний обращаются с анонимной учетной записью, когда вы начинаете с на eblcplaza. Попробуйте включить NTLM только на странице в eblcplaza, где вы используете запрос, вы можете сделать это только в этом файле. Подобно тому, что ваши учетные данные передаются в базу знаний. На обеих страницах регистрируется переменная Session («имя пользователя»).

0

Прежде всего, давайте выясним, что именно вы просите у сервера. Он потребует ваших учетных данных от клиента, с которым он теперь олицетворяет вас в целях безопасности. Запрос WinHTTP делает это службе (WinHTTP не знает, что это то же самое приложение), которое теперь требует учетных данных. То, что вы хотите, чтобы этот олицетворяющий поток выполнял, - это использовать ваши кредиты для аутентификации против «внешней» службы.

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

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

Рассмотрите эту альтернативу. Учитывая, что ServicePage.asp - это страница, используемая как напрямую браузером, так и внутренним ClientPage.asp, выполните следующие действия.

Извлеките служебный код из ServicePage.asp и поместите в класс VBScript в новый ServiceInclude.asp. Теперь добавьте этот ServiceInclude.asp в качестве файла include в ServicePage.asp, где ServicePage.asp содержит только сантехнику, необходимую для экземпляра класса, и использовать его для генерации своего вывода.

Измените ClientPage.asp, чтобы вместо того, чтобы пытаться использовать WinHttp для ServicePage.asp, он просто включает в себя ServiceInclude.asp, инсталлирует содержащийся класс и использует класс для предоставления требуемой услуги.