다음을 통해 공유


在 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 (可能為英文網頁)) 中提到的技巧而已。此案例的簡短版本為有些人想要執行如檢查使用 SAML 驗證的 SharePoint 網站狀況此類動作。這些人原本是使用 Windows 驗證之網站的工作人員,就在他們針對支援多重驗證類型 (SAML 與 Windows) 使用這些工具之後,所有工具皆停止運作。

狀況檢查的重點是向網站發出要求,並確保該資料能夠順利傳回;如果傳回錯誤碼,就無法進行後續的步驟。執行這項動作最簡單的作法,就是呼叫該網站的 REST 端點 listdata.svc。這是絕對會有的項目,將該端點設定為強制在多重驗證網站中使用 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