Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Artigo original publicado na quinta-feira, 27 de outubro de 2011
O título deste post faz parecer mais complicado do que a solução final. Na verdade, é um caso de combinar as técnicas que eu discuti nos dois posts anteriores: https://blogs.technet.com/b/speschka/archive/2010/09/25/retrieving-rest-data-in-a-claims-based-auth-site-in-sharepoint-2010.aspx e 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. A versão curta do cenário é a seguinte: algumas pessoas queriam fazer um tipo de ping de verificação da saúde de um site do SharePoint, que usasse a autenticação SAML. Antes, eles só funcionavam em sites que usavam a autenticação do Windows, e assim que tentassem usar essas ferramentas em um site que suportava diversos tipos de autenticação – SAML e Windows – elas paravam de funcionar.
A utilidade da verificação de saúde a fazer uma solicitação a um site e garantir que os dados sejam retomados; se algum código de erro for retornado, eles podem começar a analisar. Decidi que a maneira mais fácil de fazer isso é uma chamada no listdata.svc que seja o ponto de extremidade REST do site. É algo que sempre estará lá, e configurá-lo para forçar a usar o NTLM em um site de múltiplas autenticações, é algo que eu descobri que seria bem fácil, e foi mesmo. O segredo da abordagem a fazer uma HttpWebRequest e adicionar o cabeçalho que eu descrevi no segundo link acima, para forçá-lo ao usar o NTLM . O resultado é um pedaço de código bem simples, que se parece com o seguinte:
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;
Assim, como você pode ver, eu só crio a solicitação, configuro algumas propriedades e depois adiciono um cabeçalho que diga ao SharePoint para usar a autenticação do Windows. Depois, só faço minha solicitação e tudo certo. É um projeto bem simples, mas eu anexei a solução completa a este post, caso seja útil.
Este é um post de um blog localizado. Encontre o artigo original em Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010