2009-08-12 5 views
2

Я пытаюсь сделать HttpWebRequest с страницы ASP.Net на сервере под названием SV-REQ на другом сервере IIS7 с именем SV-RES. Когда я устанавливаю IIS на SV-RES для использования Digest, Basic или Negotiate и внесение изменений в объект кеш-данных для использования соответствующего метода, код выполняется отлично, и я получаю корректный ответ от SV-RES, подтверждающий, что учетные данные пользователя являются правильными. Однако, когда я устанавливаю IIS для использования «Аутентификации Windows» в SV-RES, я возвращаю ошибку 401 при использовании NTLM в объекте кеша учетных данных.HttpWebRequest через HTTPS с NTLM не работает

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

Примечание. Сервер, на котором выполняется этот код, работает под анонимной аутентификацией по протоколу HTTP. Сервер, получающий запрос, - это NTLM (как указано ранее) по HTTPS, как показано в приведенном ниже коде.

Это код исполняемого файла SV-REQ. SV-REQ является IIS7 и сконфигурирован для ASP.Net 2.0

Dim credCache As CredentialCache = New CredentialCache() 
Dim mUri As Uri = New Uri("https://sv-res.my-domain-here.com/default.htm") 
Dim mreq As HttpWebRequest = WebRequest.Create(mUri.ToString) 
credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain)) 
mreq.Credentials = credCache 
Dim mres As HttpWebResponse = mreq.GetResponse 

Вот ошибку я получаю назад от SV-RES из кода выше. SV-RES также является IIS7, настроенным для ASP.Net 2.0

 
The remote server returned an error: (401) Unauthorized. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.WebException: The remote server returned an error: (401) Unauthorized. 

Source Error: 


Line 31:   credCache.Add(mUri, "NTLM", New NetworkCredential(muser, mpass, mdomain)) 
Line 32:   mreq.Credentials = credCache 
Line 33:   Dim mres As HttpWebResponse = mreq.GetResponse 
Line 34:   Dim sr As StreamReader = New StreamReader(mres.GetResponseStream()) 
Line 35:   txtResult.Text = sr.ReadToEnd() 



Source File: C:\inetpub\httproot\contentscan.aspx.vb Line: 33 

Stack Trace: 


[WebException: The remote server returned an error: (401) Unauthorized.] 
    System.Net.HttpWebRequest.GetResponse() +1126 
    contentscan.Page_Load(Object sender, EventArgs e) in C:\inetpub\httproot\contentscan.aspx.vb:33 
    System.Web.UI.Control.OnLoad(EventArgs e) +132 
    System.Web.UI.Control.LoadRecursive() +66 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428 
+1

Я знаю, что это очевидно, но вы проверили пользователя, чьи учетные данные, которые вы отправляете, действительно разрешены? –

ответ

4

Ну, после небольшого исследования я нашел проблему здесь. Похоже, что это связано с обновлением безопасности, о котором не очень часто говорят очень часто, и поэтому я написал сообщение об этом на моем сайте: http://www.tinyint.com/index.php/2009/08/24/401-error-on-httpwebrequest-with-ntlm-authentication/

Короче говоря, это то, что патчи security update уязвимость в SMB, и часть этого включает проверку петли на имя хоста при выполнении запросов на аутентификацию. Если вы оставите эту проверку loopback включенной, вы должны ввести свое имя хоста в реестр, чтобы иметь возможность правильно аутентифицироваться.