我试图连接到使用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