Share via


Recuperando os dados REST usando o NTLM de um site de dupla autenticação no SharePoint 2010

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