J'essaie de me connecter à un service Web qui utilise l'authentification Kerberos pour autoriser l'utilisateur, mais tout ce que je reçois est un 401 non autorisé chaque fois que j'essaie de faire la demande. Voici le code que j'utilise. Merci d'avance pour toute aide que vous pouvez fournir!ASP.NET HttpWebRequest avec l'authentification Kerberos
public XPathNavigator GSASearch(string url, string searchString)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + searchString);
request.CookieContainer = new CookieContainer();
request.Credentials = CredentialCache.DefaultCredentials;
request.ContentType = "text/xml";
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
XPathDocument doc = new XPathDocument(receiveStream);
return doc.CreateNavigator();
}
EDIT: Je pense que je devrais expliquer un peu plus ce que je tente de faire. J'ai été chargé de fournir une nouvelle interface pour Google Search Appliance de mon entreprise. J'utilise une page ASP.NET, qui fait certaines choses comme choisir une collection en fonction de l'emplacement d'un utilisateur, etc., puis envoie la chaîne de recherche appropriée au GSA. Tout fonctionnait bien jusqu'à ce qu'ils décident d'activer l'authentification, et maintenant je ne peux obtenir aucun résultat (soit je reçois un 401 non autorisé, soit un message indiquant que 'les données au niveau de la racine ne sont pas valides'). Si je prends la chaîne de recherche et la fournisse directement à la GSA, elle s'authentifie correctement et affiche les résultats, je n'arrive pas à l'obtenir via HttpWebRequest.
EDIT 2: J'ai fait un peu plus de recherche (a couru la demande par l'intermédiaire de Fiddler) et il semble que la demande essaye seulement de négocier et pas Kerberos. Je mets les pouvoirs d'utiliser explicitement Kerberos comme ci-dessous, mais il n'a pas aidé ...
public XPathNavigator GSASearch(string url, string searchString)
{
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(url), "Kerberos", CredentialCache.DefaultNetworkCredentials);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + searchString);
request.CookieContainer = new CookieContainer();
request.PreAuthenticate = true;
request.Credentials = credCache;
request.ContentType = "text/xml";
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
//StreamReader readStream = new StreamReader(receiveStream);
XPathDocument doc = new XPathDocument(receiveStream);
return doc.CreateNavigator();
}
EDIT 3: Ok, regardant de plus près encore, les CredentialCache.DefaultCredentials ne semble pas avoir mes lettres de créance de réseau en ...
Vous n'avez pas mentionné où vous exécutez votre client. Est-ce une application de console, une application aspx, etc? – feroze
Désolé ... c'est une application aspx –
Je suppose que vous n'avez pas la configuration d'Active Directory correctement ... il y a quelques paramètres de confiance qui doivent être réglés entre les deux serveurs –