SharePoint 外接程序模型中仅限应用的特权和提升特权

在新 SharePoint 外接程序模型中提升代码特权的方法与使用完全信任代码不同。 在典型的完全信任代码 (FTC)/场解决方案场景中,RunWithElevatedPrivileges API 与 SharePoint 服务器端对象模型代码一起使用,并通过场解决方案对其进行部署。

在 SharePoint 外接程序模型场景中,AllowAppOnlyPolicy 权限或服务帐户用于允许当前用户执行未授权其执行的操作。

高级别准则

作为经验法则,我们提供以下高级别准则,用于提升代码的特权。

  • AllowAppOnlyPolicy 不适用于

    • 搜索 - 如果目标为本地 SharePoint。 现已添加对它的 SharePoint Online 支持(博客文章

    • 用户配置文件 CSOM 操作,例外是用户配置文件批量更新 API 可以与仅限应用权限结合使用。

    • 更新分类服务输入(写入),但读取有效

      注意

      在这些情况下,需要使用特定的服务帐户。

  • AllowAppOnlyPolicy 与 RunWithElevatedPrivileges 相似,但不完全相同。

    • AllowAppOnlyPolicy 基于授予 SharePoint 外接程序的权限执行代码,而不代表具有执行操作的适当权限的其他用户执行代码。

以下是返回仅限应用策略令牌和将其用于创建上下文对象的示例。

Uri siteUrl = new Uri(ConfigurationManager.AppSettings["MySiteUrl"]);
try
  {
    //Connect to the give site using App Only token
    string realm = TokenHelper.GetRealmFromTargetUrl(siteUrl);
    var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUrl.Authority, realm).AccessToken;

    using (var ctx = TokenHelper.GetClientContextWithAccessToken(siteUrl.ToString(), token))
    {
      // Perform operations using the app only token access.
    }
  }
  catch (Exception ex)
  {
    Console.WriteLine("Error in execution: " + ex.Message);
  }
  • 使用 AllowAppOnlyPolicy 时,注意其仅适用于提供商托管的 SharePoint 外接程序。

  • AllowAppOnlyPolicy 不代表用户执行代码,因此可能不适用于所有场景。

  • 服务帐户在 SharePoint 中指定。

    • 在 Office 365 租赁中,根据代码要求具有的功能,服务帐户可能需要向其分配的 Office 365 许可证。

    • 可以在每个 SharePoint 外接程序的基础上创建服务帐户或使用适用于所有 SharePoint 外接程序的单个帐户。

    • 为服务帐户创建清晰的描述性名称,这样就能轻松地对其执行的操作进行追踪。

      例如:如果你的 SharePoint 外接程序修改了列表项,则列表项的“修改者”列将显示与 SharePoint 外接程序关联的服务帐户的名称。

  • 对服务帐户进行身份验证时,必须检索服务帐户的用户名和密码。

    • 以下代码片段阐释了使用用户名和密码进行身份验证。

    • 注意要将用户名和密码以安全的方式进行存储和检索。

      using (ClientContext context = new ClientContext("https://tenancy.sharepoint.com"))
      {
      
        // Use default authentication mode
        context.AuthenticationMode = ClientAuthenticationMode.Default;
        // Specify the credentials for the account that will execute the request
        context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
      }
      

提升权限选项

有以下几个提升权限的选项。

  • OAuth (AllowAppOnlyPolicy)
    • S2S(子选项)
    • ACS(子选项)
  • 服务帐户
    • 远程托管代码(例如:Azure WebJob)

重要

自 2023 年 11 月 27 日起,已停用 Azure ACS (访问控制 Services for SharePoint Online) ,请查看完整的停用公告以了解详细信息。 在 SharePoint 上下文之外使用 Azure ACS 已于 2018 年 11 月 7 日停用,现已停用。

停用意味着该功能不会获得任何新投资,但仍受支持。 生命周期结束意味着该功能将停用,不再可供使用。

OAuth (AllowAppOnlyPolicy)

在此选项中,AllowAppOnlyPolicy 在 AppPermissionRequests 元素中设置为 true,并在 SharePoint 外接程序清单中设置权限。 使用 OAuth 来返回访问令牌以允许 SharePoint 外接程序执行其有权限进行的操作。

S2S 子选项

S2S 子选项仅适用于本地 SharePoint 环境。

在 S2S 场景中通过 OAuth 进行身份验证时,使用 TokenHelper::GetS2SAccessTokenWithWindowsIdentity 方法来返回 SharePoint 外接程序的访问令牌。 访问令牌允许 SharePoint 外接程序执行 SharePoint 外接程序清单中授予 SharePoint 外接程序的操作。

此选项不代表用户执行代码,因此可能不适用于所有场景。

何时适合?

需要在 SharePoint S2S 场景中提升特权时,适合使用此选项,因为该选项适用于 S2S 且非常易于实施。

入门

以下文章演示了如何借助 S2S 使用 AllowAppOnlyPolicy。

ACS 子选项

ACS 子选项适用于本地和 Office 365 SharePoint 环境。

在 ACS 场景中通过 OAuth 进行身份验证时,使用 TokenHelper::GetAppOnlyAccessTokenmethod 来返回 SharePoint 外接程序的访问令牌。 然后,调用 TokenHelper::GetClientContextWithAccessToken 方法来返回必要的客户端上下文以执行 SharePoint 外接程序基于 SharePoint 外接程序清单中授予的权限而有权限进行的操作。

此选项不代表用户执行代码,因此可能不适用于所有场景。

何时适合?

需要在 SharePoint ACS 场景中提升特权时,适合使用此选项,因为该选项适用于 ACS 且非常易于实施。 本地 SharePoint 环境已与 ACS 建立信任关系时适合此选项。 具有 Office 365 SharePoint 环境时,这是唯一的 OAuth 选项。

入门

以下文章说明了如何借助 ACS 使用 AllowAppOnlyPolicy。

重要

作为 Azure Active Directory (Azure AD) 的一项服务,Azure 访问控制 (ACS) 将于 2018 年 11 月 7 日停用。 此停用不会影响使用 https://accounts.accesscontrol.windows.net 主机名(不受此停用影响)的 SharePoint 加载项模型。 有关详细信息,请参阅停用 Azure 访问控制对 SharePoint 外接程序的影响

服务帐户

在此模式中,SharePointOnlineCredentials 类用于建立执行代码的用户的上下文。

何时适合?

需要代表特定用户(服务帐户)执行代码时,适合使用此选项,因为该选项执行用户(服务帐户)和 SharePoint 外接程序权限下的操作。

入门

以下文章说明了 SharePointOnlineCredentials 类如何用于建立执行代码的用户的上下文。

适用于

  • Office 365 多租户 (MT)
  • Office 365 专用 (D) 部分
  • SharePoint 2013 本地 – 部分

专用模式和本地模式在使用 SharePoint 外接程序模型技术方面完全相同,但在可以使用的可能的技术方面存在差异。