NTLM を使用して、SharePoint 2010 のデュアル認証サイトから REST データを取得する
原文の記事の投稿日: 2011 年 10 月 27 日 (木曜日)
この記事のタイトルは、最終的な解決策よりも実際にずっと複雑な印象を与えます。これは、実際には、私の以前の 2 つの投稿 (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.msdn.com/b/sharepoint_jp/archive/2011/05/27/retrieving-data-from-a-multi-auth-site-using-the-client-om-and-web-services-in-sharepoint-2010.aspx) で説明した技法を組み合わせたケースです。このシナリオを簡潔に述べます。あるユーザーが、SAML 認証を使用する SharePoint サイトに対して状態確認の ping のようなものを行いたいと思っていました。そのユーザーは、以前、Windows 認証を使用するサイトに対して作業していただけでした。複数の認証種類 (SAML と Windows) をサポートするサイトに対してユーザーがそのツールを試みた途端にツールは機能しなくなりました。
状態確認の要点は、単に、サイトに要求を送信してデータが戻ることを確認することです。データの代わりにエラー コードが返された場合、その調査を開始できます。私はこれを行うための最も簡単な方法を決めました。それは、単に、サイトの REST エンドポイントである listdata.svc を呼び出すだけの方法です。これは常に存在するものです。また、複数認証サイトで NTLM を強制的に使用するようにこれを構成することは、とても簡単なことだと思いました。そして実際にそうでした。この方法の主旨は、単に、HttpWebRequest を作成し、上の 2 番目のリンクで説明しているヘッダーを追加して、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;
このコードからわかるように、私は要求を作成し、いくつかのプロパティを設定します。その後、Windows 認証を使用するように SharePoint に指示する独自のヘッダーを追加します。その後、独自の要求を作成して準備完了です。これはとても簡単なプロジェクトですが、皆様のお役に立てるように、完全なソリューションをこの投稿に添付しました。
これはローカライズされたブログ投稿です。原文の記事は、「Retrieving REST Data Using NTLM From a Dual Auth Site in SharePoint 2010」をご覧ください。