在 SharePoint 2010 中使用 NTLM 从双重身份验证网站检索 REST 数据
原文发布于 2011 年 10 月 27 日(星期四)
看到这篇博客的标题后,您可能感觉操作起来肯定非常复杂,不用担心,最终解决方法特别简单。实际上,这个案例只是结合使用了我在前面的两篇文章中讨论的技术:https://blogs.technet.com/b/speschka/archive/2010/09/25/retrieving-rest-data-in-a-claims-based-auth-site-in-sharepoint-2010.aspx(该链接可能指向英文页面) 和 https://blogs.technet.com/b/speschka/archive/2011/04/01/retrieving-data-from-a-multi-auth-site-using-the-client-om-and-web-services-in-sharepoint-2010.aspx(该链接可能指向英文页面)。简单说明一下情景:一些人想要执行某种操作,如 ping 使用 SAML 身份验证的 SharePoint 网站以执行运行状况检查。以前,他们只是处理过使用 Windows 身份验证的网站,但在尝试针对支持多种身份验证类型(SAML 和 Windows)的网站使用这些工具后,这些工具便无法正常工作了。
运行状况检查的要点是对网站发出请求,确保可返回相应数据;如果返回的是某种错误代码,他们就应该开始深入研究出错原因了。我认为,最简单的方法是调用 listdata.svc,它是网站的 REST 端点。这个端点始终存在,对它进行配置,强制它在多重身份验证网站中使用 NTLM — 我认为这种方法相当简单,事实也是如此。该方法的要点是创建 HttpWebRequest,并添加我在上文的第二个链接中说明的标头,以强制它使用 NTLM。最后产生的代码块相当简单,如下所示:
string endpoint = UrlTxt.Text + "/_vti_bin/listdata.svc";
//make a request to the REST interface for the data
HttpWebRequest webRqst = (HttpWebRequest)WebRequest.Create(endpoint);
webRqst.UseDefaultCredentials = true;
webRqst.Method = "GET";
webRqst.Accept = "*/*";
webRqst.KeepAlive = true;
webRqst.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
//read the response now
HttpWebResponse webResp = webRqst.GetResponse() as HttpWebResponse;
//make the request and get the response
StreamReader theData = new StreamReader(webResp.GetResponseStream(), true);
string payload = theData.ReadToEnd();
theData.Close();
webResp.Close();
ResultsTxt.Text = payload;
您可以看到,我只是创建了请求,设置了一些属性,然后添加了指示 SharePoint 使用 Windows 身份验证的标头。然后我发出了请求,仅此而已。这个方案相当简单,但我还是在本文中附加了完整的解决方案,希望对您有所帮助。
这是一篇本地化的博客文章。请访问 Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010 以查看原文