我試圖連接到使用Kerberos身份驗證來授權用戶的Web服務,但我每次嘗試發出請求時都會收到401未授權的問題。以下是我正在使用的代碼。預先感謝您提供的任何幫助!使用Kerberos身份驗證的ASP.NET HttpWebRequest
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();
}
編輯:我覺得我應該多解釋一下我試圖做的事情。我一直負責爲我公司的Google Search Appliance提供新界面。我使用的是一個ASP.NET頁面,它執行一些操作,例如根據用戶所在的位置選擇一個集合等,然後將適當的搜索字符串發送給GSA。這一切都運行良好,直到他們決定開啓認證爲止,現在我無法得到任何結果(我要麼獲得401未經授權的消息,要麼聲明'根級數據無效')。如果我將搜索字符串並直接提供給GSA,它認證正確,並顯示結果,我似乎無法通過HttpWebRequest獲取它。
編輯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();
}
編輯3:好了,再仔細一看,該CredentialCache.DefaultCredentials不會出現在我的網絡憑據它...
你還沒有提到你在哪裏運行你的客戶端。它是一個控制檯應用程序,aspx應用程序等? – feroze 2010-09-15 01:23:29
對不起...這是一個aspx應用程序 – 2010-09-15 12:53:18
我猜你沒有正確的Active Directory設置......需要在兩臺服務器之間設置一些信任設置 – 2011-06-17 16:45:14