Faire une requête Web sur une page Web nécessitant une authentification Windows

J’essaie de faire une demande à une page Web en utilisant la classe WebRequest dans .net. L’URL que j’essaie de lire requirejs l’authentification Windows, ce qui me permet d’obtenir une exception non autorisée. Comment puis-je transmettre des informations d’identification Windows à cette demande afin qu’elle puisse s’authentifier.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" ); request.Method = "GET"; request.UseDefaultCredentials = false; request.PreAuthenticate = true; request.Credentials = new NetworkCredential( "username", "password", "domain" ); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception this.Response.Write( response.StatusCode ); 

Le code ci-dessus renvoie l’erreur suivante.

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

Lors de la vérification des détails de l’exception, j’ai remarqué que l’URL à laquelle j’essaie d’accéder est redirigé vers une autre URL, ce qui m’incite à fournir les informations de connexion NT. Je crois que les informations d’identification doivent également être transmises à cette URL. Mais apparemment, cela ne se produit pas.

Vous devez utiliser la propriété Credentials pour transmettre les informations d’identification Windows au service Web.

Si vous souhaitez transmettre les informations d’identification de l’utilisateur Windows actuel au service,

 request.Credentials = CredentialCache.DefaultCredentials; 

devrait faire l’affaire. Sinon, utilisez NetworkCredential comme suit:

 request.Credentials = new NetworkCredential(user, pwd, domain); 

J’essaie d’accéder à un lien A en passant les informations d’identification Windows. Le lien A me redirige automatiquement vers le lien B mais ne transmet pas les informations d’identification Windows que j’avais fournies. D’où l’erreur. J’ai demandé request.AutoRedirect = false et parcouru chaque fois que j’obtiens un emplacement dans l’en-tête, c’est-à-dire que je fais mes redirections manuellement chaque fois que je passe les informations d’identification Windows.

Cela a fonctionné pour moi 🙂

Pour vous authentifier auprès de WebService, utilisez DefaultNetworkCredentials au lieu de DefaultCredentials:

 request.Credentials = CredentialCache.DefaultNetworkCredentials; 

En utilisant VS2015, request.UseDefaultCredentials = true; travaille pour moi!