2009-08-12 19 views
2

J'essaye de faire un HttpWebRequest à partir d'une page ASP.Net sur un serveur appelé SV-REQ contre un autre serveur IIS7 appelé SV-RES. Lorsque je définis IIS sur SV-RES pour utiliser Digest, Basic ou Negotiate et que la modification de l'objet de cache des informations d'identification utilise la méthode appropriée, le code s'exécute correctement et j'obtiens une réponse valide de SV-RES confirmant les informations d'identification utilisateur sont corrects. Cependant, lorsque je mets IIS à utiliser "Windows Authentication" sur SV-RES, je reçois une erreur 401 lors de l'utilisation de NTLM dans l'objet de cache des informations d'identification.HttpWebRequest sur HTTPS avec NTLM ne fonctionne pas

Je suis vraiment perdue et je serais reconnaissant si quelqu'un a des informations sur la façon de faire ce travail.

Remarque: Le serveur sur lequel ce code est exécuté s'exécute sous authentification anonyme via HTTP. Le serveur recevant la requête est NTLM (comme indiqué précédemment) sur HTTPS comme on peut le voir dans le code ci-dessous.

Il s'agit du code sur SV-REQ en cours d'exécution. SV-REQ est IIS7 et est configuré pour 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 

Voici l'erreur que je reviens de SV-RES du code ci-dessus. SV-RES est également configuré pour IIS7 pour 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

Je sais que c'est évident, mais avez-vous vérifié l'utilisateur dont les informations d'identification que vous envoyez sont en fait autorisées? –

Répondre

4

Eh bien après un peu d'enquête, j'ai trouvé le problème ici. On dirait que c'est lié à une mise à jour de sécurité dont on ne parle pas vraiment et que j'ai écrit un post à ce sujet sur mon site: http://www.tinyint.com/index.php/2009/08/24/401-error-on-httpwebrequest-with-ntlm-authentication/

En résumé, les correctifs security update une vulnérabilité dans SMB et une partie de celle-ci implique une vérification de bouclage sur le nom d'hôte lors de l'exécution de demandes d'authentification. Si vous laissez cette option de bouclage activée, vous devez entrer votre nom d'hôte dans le registre pour pouvoir vous authentifier correctement.