SharePoint 加载项的安全数据访问和客户端对象模型
在评估 SharePoint 外接程序的数据访问选项时,您必须评估您的外接程序环境并考虑几个因素,如客户端与服务器之间的通信,以及您的外接程序在执行所需任务时需要的权限级别。 您还必须评估 SharePoint 外接程序的模型中可用的 API。
SharePoint 加载项中的数据简要概述
很难想象,SharePoint 加载项(或任何相关加载项)无需查询、存储或控制数据。 在加载项中,经常需要检索和控制 SharePoint 数据,如文档库和列表中的项、元数据或用户配置文件。 同样,在某些情况下,可能还需要在加载项中访问外部数据。 SharePoint 加载项模型提供多个连接选项和大量 API,用于访问 SharePoint 和外部系统上驻留的数据和服务。
设计加载项并计划数据访问时,必须做出下列两项重要决定:
- 我应使用哪一个连接选项?
- 我应使用哪些 API 访问所需数据?
以下各图汇总了由 SharePoint 外接程序的模型提供的不同选项。在后面几节中,您将详细查看每个选项并了解如何使用这些选项。
图 1 展示了在加载项中访问 SharePoint 数据时可以使用的选项。 处理这些方案时,需要确定是使用 (1) OAuth 还是使用 (2) 跨域库向 SharePoint 进行身份验证并与之通信。 对于数据访问 API,必须确定是使用 (3) 客户端对象模型(JavaScript/.NET 客户端对象模型),还是使用 (4) 表述性状态转移 (REST)。
请注意,还可以使用 (5) 远程事件接收器访问特定数据;不过,远程事件接收器的主要应用场景是执行远程代码。
图 1. 用于在加载项中使用 SharePoint 数据的选项
图 2 展示了在加载项中访问外部数据时可以使用的选项。 处理这些方案时,必须确定是使用 (1) Web 代理、(2) 外部内容类型还是使用 (3) 包含自定义代理页的跨域库,向外部服务或系统进行身份验证并与之通信。 还可以使用 (4) 客户端对象模型(JavaScript/.NET 客户端对象模型)或 (5) 表述性状态转移 (REST)。
图 2. 用于在加载项中使用外部数据的选项
SharePoint 加载项的数据连接选项
处理加载项中的数据时,必须进行多方面考虑。 例如,数据使用的路由是什么? 数据是来自服务器,还是通过服务器? 数据是否通过客户端? 能否以登录用户的身份进行身份验证? 加载项是否需要提升特权? 下面各部分可有助于回答上述问题以及可能会有的其他疑问。
SharePoint 数据连接
下列连接选项可用于访问 SharePoint 数据(见图 1):
OAuth:一种开放协议,支持以简单的标准方式进行安全授权。 使用 OAuth,用户可以批准应用代表自己执行操作,而无需共享自己的用户名和密码。 可以结合使用 OAuth 和服务器端代码。 如果需要运行非交互式进程,或需要将特权提升到非登录用户,不妨考虑使用此选项。 若要了解 OAuth,请参阅 SharePoint 加载项的授权和身份验证。
跨域库:SharePoint 网站上托管的 JavaScript 文件 (SP.RequestExecutor.js) 形式的客户端备用方案,可以在远程加载项中进行引用。 使用跨域库,可以通过代理在远程加载项页面中与多个域进行交互。 如果更希望在客户端(而不是服务器)中运行加载项代码,或 SharePoint 与远程基础结构之间存在连接障碍(如防火墙),不妨考虑使用此选项。 有关详细信息,请参阅使用跨域库从加载项访问 SharePoint 数据。
远程事件接收器:远程事件接收器可用于处理加载项中某项(如列表、列表项或 Web)上发生的事件。 这些事件类似于传统 SharePoint 解决方案中的事件,不同之处在于可以与 SharePoint 加载项的远程组件结合使用。 请注意,项的一些属性对远程事件接收器可用。 有关详细信息,请参阅在 SharePoint 加载项中创建远程事件接收器。同样,可以使用加载项事件接收器自定义加载项的安装、更新和卸载方式。 有关详细信息,请参阅在 SharePoint 加载项中创建加载项事件接收器。
SharePoint 数据连接选项:应使用哪一个?
下表列出了您在构建外接程序时可能遇到的常见要求和方案。列中的 x 指示您可在每种情况下使用的选项。
表 1. SharePoint 数据连接选项
要求/方案 | OAuth | 跨域库 |
---|---|---|
我使用客户端技术 (HTML + JavaScript)。 | x | |
我希望使用 REST 接口。 | x | x |
SharePoint 与我的远程加载项之间有防火墙, 而我需要通过浏览器发出调用。 |
x | |
我的加载项需要以登录用户的身份访问资源。 | x | x |
我的加载项需要将特权提升到 非当前登录用户。 |
x | |
我的加载项需要代表非登录用户执行操作。 | x | |
我的加载项需要用户登录才能执行操作。 | x | x |
我的加载项需要在即使用户未登录的情况下也能执行操作。 | x | |
我的加载项需要通过执行远程代码响应 SharePoint 中的事件。 |
由于远程事件接收器是在 OAuth 基础之上构建而成,因此上表中的对比并不是确定是否应使用这些选项的最佳方式。 如果除了数据交换之外还需要执行远程代码,请使用远程事件接收器。
外部数据连接
访问外部数据(请参阅图 2)时可使用以下连接选项:
Web 代理: 作为开发人员,您可以使用在客户端 API(如 JSOM)中公开的 Web 代理。 在您使用 Web 代理时,将向 SharePoint 发出初始请求。 反过来,SharePoint 向指定终结点请求数据,并将该请求转发回你的页面。 如果您希望在服务器级别上进行通信,请使用 Web 代理。 Web 代理旨在访问不要求身份验证的非结构化数据。 有关详细信息,请参阅 使用 SharePoint 中的 Web 代理查询远程服务。
外部内容类型:创建的加载项可以访问 SAP、Netflix 和专有数据源的外部数据以及其他类型数据,而无需租户管理员参与。 通过 Business Connectivity Services (BCS) 维护对外部应用程序的访问,它提供了可供其他 SharePoint 应用程序使用的一致且统一的接口。 如果使用的是 BCS 模型,且必须经过身份验证才能访问数据,不妨考虑使用应用范围 ECT。 有关详细信息,请参阅 SharePoint 中的加载项范围外部内容类型。
跨域库的自定义代理页: 如果您提供在远程外接程序基础结构中托管的自定义代理页,则可以使用跨域库访问远程外接程序中的数据。 作为开发人员,您负责自定义代理页的实现,并且您必须向远程外接程序提供自定义逻辑(如身份验证机制)。 如果您希望在客户端级别上进行通信,则可以将跨域库与自定义代理页结合使用。 有关详细信息,请参阅 为 SharePoint 中的跨域库创建自定义代理页。
外部数据连接选项:应使用哪一个?
下表列出了您在构建外接程序时可能遇到的常见要求和方案。列中的 x 指示您可在每种情况下使用的选项。
表 2. 外部数据连接选项
要求/方案 | Web 代理 | 外部内容类型 | 包含自定义代理页的跨域库 |
---|---|---|---|
我使用客户端技术 (HTML + JavaScript)。 | x | x | x |
我无法向远程外接程序或服务添加页面或组件。 | x | x | |
我希望使用 REST 接口。 | x | x | x |
我希望使用 JavaScript CSOM。 | x | x | x |
我希望使用 .NET CSOM。 | x | x | |
SharePoint 基础结构与我的外接程序之间没有直接连接。 我需要通过浏览器发出调用。 | x | x | |
我的加载项需要以登录用户的身份访问资源。 | x | x | x |
SharePoint 加载项可用的数据访问 API
下列 API 选项可用于从加载项访问 SharePoint 数据:
代表性状态传输 (REST): 对于您需要通过不使用 JavaScript 且不是在 .NET Framework 平台上构建的客户端技术访问 SharePoint 实体的方案,SharePoint 提供了对使用 Open Data (OData) 协议对 SharePoint 数据执行 CRUDQ(创建、读取、更新、删除和查询)操作的 REST Web 服务的实现。 此外,客户端对象模型中的几乎每个 API 均具有一个对应的 REST 终结点。 这使得您的代码能够使用支持标准 REST 功能的任何技术直接与 SharePoint 进行交互。 为了使用 SharePoint 中内置的 REST 功能,您的代码构造了对与所需 SharePoint 对象对应的终结点的 RESTful HTTP 请求。 REST 服务将处理 HTTP 请求并为 Atom 或 JavaScript 对象表示法 (JSON) 格式的响应提供服务。 若要了解有关 SharePoint 中的 REST 的详细信息,请参阅 在 SharePoint REST 请求中使用 OData 查询操作。
.NET Framework 客户端对象模型(.NET 客户端 OM): 核心网站和列表服务器端对象模型中的几乎每个类均在 .NET Framework 客户端对象模型中有一个对应的类。 此外,.NET Framework 客户端对象模型还公开了一组用于扩展其他功能的完整 API,其中包括一些 SharePoint 级别的功能,例如 ECM、分类、用户配置文件、高级搜索、分析、BCS 等。 若要了解有关客户端对象模型的详细信息,请参阅 在 SharePoint 中选择正确的 API 集。
JavaScript 客户端对象模型 (JSOM): SharePoint 提供了一个可在内联脚本或单独的 .js 文件中使用的 JavaScript 对象模型。 它包括与 .NET Framework 客户端对象模型相同的所有功能。 JSOM 是一种包含外接程序中的自定义 SharePoint 代码的有用方式,特别是在 SharePoint 承载的外接程序中,不允许自定义服务器端代码。 此外,Web 开发人员可通过此模型使用其现有的 JavaScript 技能创建 SharePoint 外接程序应用程序(此过程的学习曲线最小)。 若要了解有关客户端对象模型的详细信息,请参阅 在 SharePoint 中选择正确的 API 集。
您在访问外部数据时,还可以使用 SharePoint 外接程序中的其他 API。 具体取决于必须提供外部服务和系统的接口。 您在设计中还应考虑这些接口。