关于SharePoint REST中的授权的研究

博客地址:http://blog.csdn.net/FoxDave

当我们开发SharePoint APP需要调用REST服务时,可以使用OAuth完成授权,也可以使用跨域库。以下是微软专家的一段注解。

如果是从无法以独占方式使用客户端代码(HTML 和 JavaScript)的远程托管应用程序调用 SharePoint,且 SharePoint 与应用程序之间没有防火墙阻隔,则可使用 OAuth 2.0 令牌(使用 Microsoft 访问控制服务 (ACS) 作为安全令牌服务器)。

如果客户端代码和登录到 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未授权的错误:

我为什么尝试第三种方式,因为在移动设备中应该是无法应用前两种方式的。

以上便是之前研究的总结,由于有其他事情暂且搁置在此并分享出来,希望对朋友们能起到抛砖引玉的作用,也欢迎共同探讨解决方案。

时间: 2024-08-27 05:03:27

关于SharePoint REST中的授权的研究的相关文章

SharePoint 2013 中的SQL Server 安全

使用SharePoint很长时间以来,都认为Sql只需要最初始的配置,即不再需要管理和维护:而事实上,Sql的管理和安全,都是和SharePoint环境的稳定性息息相关的,所以,要绝对重视SharePoint中Sql Server的管理和维护. 本文主要介绍的有以下三点: 一.关于Sql账号的权限: 二.关于Sql Server的磁盘管理 三.关于Sql Server服务端口的修改 一.关于Sql账号的权限 首先,要说的就是关于账号的问题,无论是SharePoint服务器场配置账号,还是各种服务

sharepoint给文档授权

 //在列表根目录下创建文件夹 public static string CreatFolderToSPDocLib(string strFolderName, string strDocLibName) { string FolderPath = string.Empty; try { using (SPSite site = new SPSite(SiteUrl)) { using (SPWeb web = site.OpenWeb()) { web.AllowUnsafeUpdates =

SharePoint 2013中使用SP.UI.ModalDialog.showModalDialog时showModalDialog未定义的解决办法

本文讲述SharePoint 2013 中使用 SP.UI.ModalDialog.showModalDialog时 showModalDialog  未定义的问题. function DialogCallback(dialogResult, returnValue) { if (returnValue == '1') { alert("operation successfully"); } } var options = { url:'url', width: 600, height

linux系统中各个路由表的研究

linux中有0~255共256张路由表.其中0号表示unspec(未指定),253,254,255分别表示default.main.local表.除了以上4张表外的其他表都是留给用户指定的表.现在就说下以上5张系统表的作用. 首先是0号表unspec.这张表可以理解成所有路由表的总和,也就是说所有路由表中的路由条目在这个表中都会有一条相对应.这样如果想看看系统中所有路由表的路由条目就可以看这张表.当然对这张表中的路由条目操作也等同于对其他表中对应的路由条目操作,因此可要小心千万别清空这个路由表

在 SharePoint 2013中使用 RelatedItems 列(Site column)

本文讲述 在 SharePoint 2013中使用 RelatedItems 列(Site column). RelatedItems 一个隐藏的 Site column,用于存储与当前列表项(List Item) 有关的其他文档或列表项. 比较有意思的是,添加和删除RelatedItem都是在 View Form,而不失Edit Form: 那么这个列既然是隐藏字段,怎么把它修改成可以加入到其他列表和文档库的公共字段(Site column)呢? a.打开站点设置(Site settings)

SharePoint 2010 中使用Ztree和EasyUI样式冲突问题

<style type="text/css"> /*解决ztree和SharePoint样式冲突问题*/ .ztree li a { display: inline-block !important; padding: 1px 3px 0 0 !important; height: 18px !important; } .ztree li ul { margin: 0 !important; padding: 0 0 0 18px !important; } /*解决tre

SharePoint 2013中的默认爬网文件扩展名和分析文件类型

摘要:了解默认情况下 SharePoint 2013 爬网的文件扩展名及其解析的文件类型,可以借此了解搜索可以爬的文件和支持的功能. 如果“管理文件类型”页上的列表包含文件扩展名,爬网组件将仅爬网文件.内容处理组件只能解析爬网文件的内容: 当它具有可解析文件格式的格式处理程序. 当使用格式处理程序解析具有文件格式和文件扩展名的文件时. 默认情况下,SharePoint 2013 满足很多文件类型的这些要求. 默认爬网文件扩展名和解析文件格式 下表显示 SharePoint 2013 具有内置格式

SPServices介绍之一:将SPServices添加到SharePoint项目中

分类: SPSerivces2014-09-21 04:03 233人阅读 评论(0) 收藏 举报 sharepoint 2013javascriptSPServices开源库 SPServices - JQuery Libraries for SharePoint Web Services是一个基于JQuery的开源库,可以到CodePlex上下载:点击打开链接. 这个库可以使开发者更方便的调用SharePoint提供的Web Services,并且全都是客户端代码,不需要在服务端安装,轻巧快

在SharePoint 2010中部署RBS

分类:             SharePoint              2015-01-28 10:12     62人阅读     评论(0)     收藏     举报 一.RBS(Remote BLOB Storage)简介 在SharePoint的大部分企业应用案例中,SharePoint都是要承担着非常繁重的文件管理工作,这些文件类型包括了Word文档,Excel文档甚至是数据量庞大的音频.视频文件.对于这些文件,SharePoint默认都是将它们以BLOB的数据形式存储在内容