web-dev-qa-db-fra.com

Faire une demande Web sur une page Web qui nécessite une authentification Windows

J'essaie de faire une demande à une page Web en utilisant la classe WebRequest en .net. L'URL que j'essaie de lire nécessite une authentification Windows en raison de laquelle j'obtiens 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.

J'ai remarqué une chose lors de la vérification des détails de l'exception, c'est que l'URL à laquelle j'essaie d'accéder redirige vers une URL différente qui m'invite à fournir les informations de connexion NT. Je crois que les pouvoirs devraient également être transmis à cette URL. Mais apparemment, cela ne se produit pas.

35
Hemanshu Bhojak

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

Cela a fonctionné pour moi :)

9
Hemanshu Bhojak

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);
39
VinayC

Pour l'authentification auprès du service Web, utilisez DefaultNetworkCredentials au lieu de Default Credentials:

request.Credentials = CredentialCache.DefaultNetworkCredentials;
8
Vitaliy Ulantikov

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

6
Rob Bowman