Поделиться через


Повышенные привилегии и разрешения в контексте приложения в модели надстроек SharePoint

В новой модели надстроек SharePoint привилегии повышаются в коде не так, как в коде полного доверия. В типичном решении фермы с кодом, требующим полного доверия (FTC), API RunWithElevatedPrivileges используется с помощью кода серверной объектной модели 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 изменяет элементы списка, столбец Modified By (Автор изменений) для элементов списка отобразит имя учетной записи службы, связанной с надстройкой 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)

Важно!

Использование Azure ACS (служб контроль доступа) для SharePoint Online прекращено с 27 ноября 2023 г. См. полное объявление о выходе из эксплуатации, чтобы узнать больше. Использование Azure ACS вне контекста SharePoint уже прекращено 7 ноября 2018 г. и сейчас заканчивается.

Прекращение использования означает, что эта функция не получит новых инвестиций, но она по-прежнему поддерживается. Окончание срока службы означает, что эта функция будет прекращена и больше не доступна для использования.

OAuth (AllowAppOnlyPolicy)

В этом способе параметру AllowAppOnlyPolicy присваивается значение true в элементе AppPermissionRequests, а разрешения устанавливаются в манифесте надстройки SharePoint. OAuth используется для возвращения маркеров доступа, позволяющих надстройке SharePoint выполнять операции, на совершение которых у нее есть разрешения.

Подпараметр S2S

Подпараметр S2S поддерживается только в локальных средах SharePoint.

При проверке подлинности с помощью OAuth в сценарии S2S используется метод TokenHelper::GetS2SAccessTokenWithWindowsIdentity для возвращения маркера доступа для надстройки SharePoint. Маркер доступа позволяет надстройке SharePoint выполнять любые операции, на которые ей предоставлены разрешения в манифесте надстройки SharePoint.

В этом способе не выполняется код от имени пользователя, поэтому его не рекомендуется использовать для всех сценариев.

Для каких случаев он подходит?

Этот способ подходит для повышения привилегий в сценарии S2S SharePoint, так как он поддерживает S2S и прост в применении.

Начало работы

В представленной ниже статье показано, как использовать AllowAppOnlyPolicy с S2S.

Подпараметр ACS

Подпараметр ACS поддерживается в локальных средах и SharePoint Office 365.

При проверке подлинности с помощью OAuth в сценарии ACS используется метод TokenHelper::GetAppOnlyAccessTokenmethod для возвращения маркера доступа для надстройки SharePoint. После этого вызывается метод TokenHelper::GetClientContextWithAccessToken для возвращения контекста клиента, необходимого для выполнения любых операций, разрешенных для надстройки SharePoint на основе разрешений, предоставленных в манифесте надстройки SharePoint.

В этом способе не выполняется код от имени пользователя, поэтому его не рекомендуется использовать для всех сценариев.

Для каких случаев он подходит?

Этот способ подходит для повышения привилегий в сценарии ACS SharePoint, так как он поддерживает ACS и прост в применении. Этот способ подходит для локальной среды SharePoint с установленным отношением доверия с ACS. Это единственный способ OAuth при использовании среды SharePoint Office 365.

Начало работы

В представленной ниже статье показано, как использовать AllowAppOnlyPolicy с ACS.

Важно!

Служба контроля доступа Azure (ACS), которая входит в состав Azure Active Directory (Azure AD), будет упразднена 7 ноября 2018 г. Это не влияет на модель надстроек SharePoint, использующую имя узла https://accounts.accesscontrol.windows.net (на который также не влияет это прекращение работы службы). Дополнительные сведения см. в статье Влияние упразднения службы контроля доступа Azure на надстройки SharePoint.

Учетная запись службы

В этом шаблоне используется класс SharePointOnlineCredentials для создания контекста пользователя, выполняющего код.

Для каких случаев он подходит?

Этот способ подходит, если нужно выполнить код от имени определенного пользователя (учетной записи службы), так как он выполняет действия с использованием разрешений пользователя (учетной записи службы) и надстройки SharePoint.

Начало работы

В приведенной ниже статье показано, как используется класс SharePointOnlineCredentials для создания контекста пользователя, выполняющего код.

Область применения

  • Office 365 Multi Tenant (MT)
  • Office 365 Dedicated (D) частично
  • Локальная среда SharePoint 2013 — частично

Шаблоны для выделенных и локальных служб идентичны методам модели надстроек SharePoint с отличиями, связанными с возможностью применения технологий.