Abrufen von REST-Daten mit NTLM von einer Website mit zwei Authentifizierungsanbietern in SharePoint 2010

Veröffentlichung des Originalartikels: 27.10.2011

Der Titel dieses Beitrags klingt viel komplizierter, als die Lösung tatsächlich ist. Eigentlich handelt es sich um die Kombination der Techniken, die ich in zwei früheren Beiträgen beschrieben habe:  https://blogs.technet.com/b/speschka/archive/2010/09/25/retrieving-rest-data-in-a-claims-based-auth-site-in-sharepoint-2010.aspx und 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.  Die Kurzversion dieses Szenarios lautet: Ein paar Leute wollten eine Art Integritätsprüfung für eine SharePoint-Website ausführen, die SAML-Authentifizierung verwendete. Zuvor hatten sie nur mit Websites gearbeitet, die Windows-Authentifizierung verwenden, und als sie die Tools auf einer Website ausprobiert haben, die beide Authentifizierungstypen – SAML und Windows – unterstützte, funktionierten die Tools nicht mehr.

Die Integritätsprüfung besteht einfach darin, eine Anforderung an eine Website zu stellen und sich zu vergewissern, dass Daten zurückgegeben werden. Wenn stattdessen ein Fehlercode zurückgegeben wird, können sie ihn näher untersuchen. Ich beschloss, dass dies am einfachsten durch einen Aufruf des listdata.svc zu machen ist, der den REST-Endpunkt der Website darstellt. Dieser ist immer vorhanden, und ihn so zu konfigurieren, dass er auf einer Website mit mehreren Authentifizierungsanbietern NTLM verwendet, schien mir ziemlich einfach. Und das war es auch. Das Wesentliche an diesem Ansatz besteht darin, einen HttpWebRequest abzusetzen und den Header hinzuzufügen, den ich im zweiten obigen Link beschrieben habe, um die Verwendung von NTLM zu erzwingen. Das Ergebnis ist ein ziemlich einfach aussehender Codeabschnitt ähnlich dem folgenden:

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;

Wie Sie sehen, erstelle ich nur die Anforderung, lege ein paar Eigenschaften fest und füge dann den Header hinzu, der SharePoint anweist, die Windows-Authentifizierung zu verwenden. Dann stelle ich die Anforderung und das war's. Es ist ein ziemlich einfaches Projekt, aber ich habe die ganze Lösung an den Beitrag angefügt, für den Fall, dass sie jemandem nützlich sein könnte.

 

Es handelt sich hierbei um einen übersetzten Blogbeitrag. Sie finden den Originalartikel unter Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010.