提升的特权

使用仅应用策略或服务帐户来提升 SharePoint 加载项或其他远程托管解决方案中的特权。

适用于:SharePoint 相关应用 | SharePoint 2013 | SharePoint 外接程序 | SharePoint Online

使用不同的方法以在 SharePoint 外接程序和服务器场解决方案中提升特权。 服务器场解决方案使用 RunWithElevatedPrivileges (SPSecurity.CodeToRunElevated)(属于 SharePoint 服务器端对象模型)来提升特权。 SharePoint 外接程序则使用仅应用程序策略或服务帐户。

在下列情况下,可能需要在外接程序中使用提升的特权:

  • 你的外接程序为用户执行操作,但用户不具有足够的个人权限。 由于权限级别过高,管理员可能没有对用户分配特定权限。

    例如,你的组织可能会实现用户必须用于创建网站集的自定义网站集设置解决方案。 你的组织可指定所有新网站集都必须具有特定列表、内容类型或与之相关联的字段。 如果用户创建自己的网站集,他们也可能会记得或忘记在其新网站集上创建这些对象。 在此方案中,用户使用外接程序创建网站集,但系统不会为这些用户单独分配创建网站集的权限。

  • 你的外接程序不代表任何用户。例如,控制或管理流程。

仅应用程序策略授权

仅外接程序策略使用 OAuth 对你的外接程序进行身份验证。 当外接程序使用仅应用程序策略时,SharePoint 将仅检查外接程序主体的权限。 这些权限是已对外接程序授予的权限。 无论与当前用户相关联的权限是什么,只要外接程序具有足够的权限来执行任务,授权都会成功。 授权成功后,访问令牌将返回至你的外接程序。 你的外接程序将使用此访问令牌来执行你的代码所需的任何操作。

有关详细信息,请参阅 SharePoint 2013 中的应用授权策略类型

注意

仅限应用策略只适用于提供商托管加载项。访问主机 Web 的 SharePoint 托管加载项必须使用“用户+应用”策略。

在加载项中使用仅限应用策略的好处包括:

  • 您无需授予单独的用户许可证。 服务帐户需要单独的用户许可证。

  • 与服务帐户相比,可获得更为具体的控制权。 例如,您可以将 FullControl 权限应用到 Web,如果您使用的是服务帐户,则无法执行该操作。

不能将仅应用程序策略与以下 API 一起使用:

  • 用户配置文件

  • 搜索

若要使用仅应用程序策略,首先必须使用 appinv.aspx 向外接程序授予权限。 AppManifest.xml 文件中的以下代码演示如何设置仅应用程序策略和外接程序的权限。

 <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
 </AppPermissionRequests>

使用仅应用程序策略要求你的外接程序使用低信任或高信任授权。 该策略不适用于 SharePoint 跨域 JavaScript 库,而这是获取访问 SharePoint 资源权限的第三种方式。

app@sharepoint权限不再适用于新式术语存储用户界面。 这是因为应用不再需要app@sharepoint权限来执行分类写入操作,只要应用在 Azure AD 中注册且具有仅应用分类访问所需的资源许可即可。

低信任授权

当使用 Microsoft Azure 访问控制服务 (ACS) 在提供程序托管的外接程序和你的 Office 365 网站或本地 SharePoint 服务器场之间建立信任时,你的外接程序可以使用低信任授权。 你可以在 SharePoint Add-ins 2013 的三种授权系统中了解详细信息。

重要

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

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

若要获取对 ClientContext 对象的引用,外接程序应:

  1. 使用 TokenHelper.GetAppOnlyAccessToken 获取访问令牌。

  2. 使用 TokenHelper.GetClientContextWithAccessToken 获取 ClientContext 对象。

注意

TokenHelper.cs 文件是 Microsoft Visual Studio 的 Office 开发人员工具生成的源代码。 虽无它的参考文档,但 TokenHelper 类中有大量注释。 若要查看代码注释,请在 Visual Studio 中创建提供商托管加载项。

注意

本文中的代码按原样提供,不提供任何明示或暗示的担保,包括对特定用途适用性、适销性或不侵权的默示担保。

Uri siteUrl = new Uri(ConfigurationManager.AppSettings["MySiteUrl"]);
try
{
    // Connect to a site using an 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 on the ClientContext object, which uses the app-only token. 
    }
}
catch (Exception ex)
{
    Console.WriteLine("Error in execution: " + ex.Message);
}

高信任授权

如果你的外接程序使用高信任授权系统(也称为 S2S 协议),它将调用不同的 TokenHelper 方法:TokenHelper.GetS2SAccessTokenWithWindowsIdentity

Important: The TokenHelper.GetS2SAccessTokenWithWindowsIdentity is used for both app-only and user+app calls. The second parameter of the method, which holds the user identity, determines which policy is used. Pass null to use the app-only policy.

服务帐户

只有在仅应用程序策略提供的权限不足以完成任务的情况下,才使用服务帐户来为你的外接程序提升特权。 此外,在某些情况下,必须使用用户帐户。 例如,当你的代码用于以下任一 SharePoint 服务应用程序时,就需要使用服务帐户:

  • 使用客户端对象模型 (CSOM) 的用户配置文件服务

  • 托管的元数据服务

  • 搜索

计划在你的外接程序中使用服务帐户时,请考虑以下事项:

  • 服务帐户需要单个用户许可证。

  • 针对每个外接程序创建一个服务帐户,或在 SharePoint 环境中将一个服务帐户用于所有的外接程序。

  • 必须在授权过程中提供用户名和密码。 确保已安全存储或检索服务帐户凭据。

  • 必须先向服务帐户授予对网站的访问权限,然后加载项才能在网站上执行操作。

注意

从 Office 应用商店购买的加载项不能使用服务帐户。

下面的代码展示了如何结合使用 SharePointOnlineCredentials 和服务帐户进行身份验证。

using (ClientContext context = new ClientContext("https://contoso.sharepoint.com"))
{

    // Use default authentication mode.
    context.AuthenticationMode = ClientAuthenticationMode.Default;  

    // Specify the credentials for the service account.
    context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
}

另请参阅