Recupero di dati REST utilizzando NTLM da un sito con autenticazione doppia in SharePoint 2010
Articolo originale pubblicato giovedì 27 ottobre 2011
Il titolo del post in realtà sembra più complesso di quanto non sia la soluzione finale. Si tratta di un caso di combinazione delle tecniche che ho illustrato nei post precedenti: 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. La versione breve dello scenario è la necessità di alcuni utenti di effettuare un ping per il controllo dell'integrità a un sito SharePoint in cui viene utilizzata l'autenticazione SAML. In precedenza, l'operazione era stata effettuata in siti con autenticazione di Windows, ma non appena si utilizzavano questi strumenti per un sito in cui erano supportati più tipi di autenticazione, SAML e Windows, l'esito era negativo.
Il controllo dell'integrità ha lo scopo di effettuare una richiesta a un sito e verificare che vengano restituiti i dati; se invece viene restituito un codice di errore è necessario approfondire la questione. Sono giunto alla conclusione che il modo più semplice per eseguire l'operazione fosse effettuare una chiamata a listdata.svc, l'endpoint REST per il sito. Si tratta di un elemento sempre presente e mi è sembrata una soluzione semplice configurarlo in modo da forzare l'utilizzo di NTLM in un sito con più autenticazioni. Il nocciolo di questo approccio consiste nell'eseguire una richiesta HttpWebRequest e nell'aggiungere l'intestazione descritta nel secondo collegamento riportato sopra per forzare l'utilizzo di NTLM. Il risultato è un blocco di codice piuttosto diretto, analogo a quello seguente:
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;
Come potete notare, ho creato la richiesta, impostato alcune proprietà e aggiunto l'intestazione con cui si comunica a SharePoint di utilizzare l'autenticazione di Windows. È quindi sufficiente effettuare la richiesta per procedere. Si tratta di un progetto semplice, ma allegata al post trovate la soluzione completa che potrà esservi utile.
Questo è un post di blog localizzato. Consultate l'articolo originale: Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010