Я пытаюсь подключиться к веб-службе, которая использует аутентификацию Kerberos для авторизации пользователя, но все, что я получаю, является несанкционированным 401 каждый раз, когда я пытаюсь выполнить запрос. Ниже приведен код, который я использую. Заранее благодарим за любую помощь, которую вы можете предоставить!ASP.NET HttpWebRequest с аутентификацией 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: Я чувствую, что должен объяснить немного больше того, что я пытаюсь сделать. Мне было поручено предоставить новый интерфейс для Google Search Appliance моей компании. Я использую страницу ASP.NET, которая делает некоторые вещи, например, выбрать коллекцию в зависимости от того, где находится пользователь и т. Д., А затем отправляет соответствующую строку поиска в GSA. Все это хорошо работало, пока они не решили включить аутентификацию, и теперь я не могу получить никаких результатов (я либо получил 401 неавторизованный, либо сообщение о том, что «Данные на корневом уровне недействительны»). Если я возьму строку поиска и предоставил ее непосредственно GSA, она будет аутентифицироваться отлично и отобразит результаты, я просто не могу получить ее через HttpWebRequest.
EDIT 2: Я немного поглядел (выполнил запрос через Fiddler), и похоже, что запрос только пытается вести переговоры, а не Kerberos. Я установил полномочия использовать Kerberos явно, как показано ниже, но это не помогло ...
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: Хорошо, приглядевшись опять же, CredentialCache.DefaultCredentials не кажется, есть свои сетевые учетные данные в это ...
Вы не указали, где вы работаете с вашим клиентом. Это консольное приложение, приложение aspx и т. Д.? – feroze
Извините ... это приложение aspx –
Я предполагаю, что у вас нет настройки Active Directory правильно ... есть некоторые настройки доверия, которые необходимо установить между двумя серверами. –