關於SharePoint REST中的授權的研究

來源:互聯網
上載者:User

標籤:sharepoint   sharepoint 2013 rest   

部落格地址:http://blog.csdn.net/FoxDave當我們開發SharePoint APP需要調用REST服務時,可以使用OAuth完成授權,也可以使用跨網域程式庫。以下是微軟專家的一段註解。如果是從無法以獨佔方式使用用戶端代碼(HTML 和 JavaScript)的遠程託管應用程式調用 SharePoint,且 SharePoint 與應用程式之間沒有防火牆阻隔,則可使用 OAuth 2.0 令牌(使用 Microsoft 存取控制服務 (ACS) 作為Security Token Service器)。如果用戶端代碼和登入到 SharePoint 的使用者的許可權足夠,則 JavaScript 跨網域程式庫 (bit.ly/12kFwSP) 將是一個很好的 OAuth 替代品。 另外,當進程調用需要穿過防火牆時,跨網域程式庫也是替代 OAuth 的一個好選擇。 MSDN 庫文章“SharePoint 2013 資料訪問選項”(bit.ly/WGvt9L) 詳細介紹了這些選項。但是這些主要都是針對SharePoint App來說的,當我們在我們自己的應用(如第三方網站、行動裝置等)中要通過REST擷取sharepoint的內容時,要如何做呢?筆者做了以下一些研究,但是沒有得出最終解決方案,前一陣請教過Jason Huang,後來也沒有音信了。歡迎大牛能進行指點,也歡迎大家多多討論。我先描述一下大致的情境:遠程SharePoint網站,採用NTLM協議的認證。我要做的就是通過調用REST服務來擷取資料。本文以命令列程式作為樣本,訪問SharePoint的內容。
一. 採用網路請求(WebRequest)的方式
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ap.2013.trial.nintex.com/_api/web/");            request.Accept = "application/json;odata=verbose";            NetworkCredential myCredential = new NetworkCredential("Justin.Liu1", "3QF0\"gn", "EXT");            request.Credentials = myCredential;            WebResponse response = request.GetResponse();            Stream stream = response.GetResponseStream();            StreamReader sr = new StreamReader(stream);            string content = sr.ReadToEnd();
這個方式獲得了我需要的資料,抓包可以看到網路請求的過程如下:??基本的流程大致如下:先去敲門,遠程SharePoint回應“我在”;然後用提供的憑據去進行驗證,驗證通過後返回認證通過的編碼串;通過這個編碼串再去請求需要的資料,遠程SharePoint認證通過會返回請求的資料。
二. 採用用戶端物件模型CSOM的方式
NetworkCredential myCredential = new NetworkCredential("Justin.Liu1", "3QF0\"gn", "EXT");ClientContext ctx = new ClientContext("https://ap.2013.trial.nintex.com/");            ctx.Credentials = myCredential;            Web web = ctx.Web;            ctx.Load(web);            ctx.ExecuteQuery();            string title = web.Title;
這種方式也獲得了我需要的資料,來看一下抓包得到的過程:從中我們可以看到,CSOM實際上是封裝了SharePoint的WebService。
三. 採用調用SharePoint WebService的方式
//Site URL: https://ap.2013.trial.nintex.com            //Username: EXT\Justin.Liu1            //Password: 3QF0"gn            var soapEnv = string.Format(@"<?xml version=""1.0"" encoding=""utf-8""?>                    <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">                      <soap:Body>                        <Login xmlns=""http://schemas.microsoft.com/sharepoint/soap/"">                          <username>{0}</username>                          <password>{1}</password>                        </Login>                      </soap:Body>                    </soap:Envelope>","EXT\\Justin.Liu1","3QF0\"gn");            byte[] data = Encoding.UTF8.GetBytes(soapEnv);            HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("https://ap.2013.trial.nintex.com/_vti_bin/Authentication.asmx");            loginRequest.Headers["SOAPAction"] = "http://schemas.microsoft.com/sharepoint/soap/Login";            loginRequest.Method = "POST";            loginRequest.ContentType = "text/xml; charset=utf-8";            loginRequest.ContentLength = data.Length;            Stream requestStream = loginRequest.GetRequestStream();            requestStream.Write(data, 0, data.Length);            requestStream.Close();            WebResponse loginResponse = loginRequest.GetResponse();            Stream loginStream = loginResponse.GetResponseStream();            StreamReader lsr = new StreamReader(loginStream);            string loginContent = lsr.ReadToEnd();            requestStream.Close();
該方式並沒有成功,報出401未授權的錯誤: 我為什麼嘗試第三種方式,因為在行動裝置中應該是無法應用前兩種方式的。
以上便是之前研究的總結,由於有其他事情暫且擱置在此並分享出來,希望對朋友們能起到拋磚引玉的作用,也歡迎共同探討解決方案。

關於SharePoint REST中的授權的研究

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.