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


Предоставление доступа с помощью SharePoint App-Only

SharePoint App-Only является более старой, но по-прежнему очень актуальной моделью настройки субъектов приложений. Эта модель работает как для SharePoint Online, так и для локальной среды SharePoint (выпуск 2013/2016/2019/subscription) и идеально подходит для подготовки приложений к миграции из локальной среды SharePoint в SharePoint Online. Ниже показано, как настроить субъект приложения с разрешениями на полный доступ клиента, но вы также можете предоставить разрешения только на чтение, используя этот подход.

Важно!

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

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

Для новых клиентов приложения, использующие маркер доступа только для приложений ACS, по умолчанию отключены. Мы рекомендуем использовать Azure AD модель только для приложений, которая является современной и более безопасной. Но вы можете изменить поведение, запустив set-spotenant -DisableCustomAppAuthentication $false (требуется последняя версия администратора SharePoint PowerShell).

Настройка субъекта только для приложений с разрешениями клиента

Примечание.

Администратор семейства веб-сайтов не может зарегистрировать надстройку в Azure ACS в AppRegNew.aspx по умолчанию, если это явно не разрешено администратором клиента SharePoint. Дополнительные сведения см. в разделе Set-SPOTenant.

Перейдите на сайт в клиенте (например, https://contoso.sharepoint.com) и вызовите страницу appregnew.aspx (например, https://contoso.sharepoint.com/_layouts/15/appregnew.aspx). На этой странице заполните оставшиеся сведения, как показано на снимке экрана ниже.

Создание секрета идентификатора клиента &

Важно!

После нажатия Create вы получите идентификатор клиента и секрет клиента, сохраните полученные сведения (идентификатор клиента и секрет клиента), так как они понадобятся вам на следующем шаге!

Следующий шаг — предоставление разрешений только что созданному субъекту. Так как мы предоставляем разрешения на уровне клиента, это можно сделать только на странице appinv.aspx на сайте администрирования клиента. Вы можете связаться с этим сайтом через https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx. После загрузки страницы добавьте идентификатор клиента и найдите созданный субъект:

Предоставление разрешений новому субъекту

Чтобы предоставить разрешения, необходимо указать XML-код разрешений, описывающий необходимые разрешения. Так как это приложение должно иметь доступ ко всем сайтам , также использует поиск только для приложения, ему требуются следующие разрешения:

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

При нажатии кнопки Создать откроется диалоговое окно согласия на разрешение. Нажмите кнопку Доверять, чтобы предоставить разрешения:

использование appregnew.aspx

Важно!

Защитите созданное сочетание идентификатора и секрета клиента, как и учетная запись администратора. С помощью этого идентификатора или секрета клиента можно считывать и обновлять все данные в среде SharePoint Online.

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

Использование этого субъекта с PnP PowerShell

Если вы хотите использовать созданную регистрацию только для приложений с помощью PnP PowerShell, это можно сделать, подключись к локальной или сетевой среде SharePoint с помощью:

Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/demo -ClientId [Your Client ID] -ClientSecret "[Your Client Secret]"

Примечание.

PnP PowerShell — это решение с открытым исходным кодом, поддержка которого предоставляется активным сообществом. Для инструментов с открытым исходным кодом не существует соглашения об уровне обслуживания в отношении поддержки корпорацией Майкрософт.

Использование этого субъекта в приложении с помощью библиотеки PnP Framework

На первом шаге добавьте пакет nuget библиотеки PnP Framework: https://www.nuget.org/packages/PnP.Framework. После этого можно использовать приведенную ниже конструкцию кода:

string siteUrl = "https://contoso.sharepoint.com/sites/demo";
using (var cc = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, "[Your Client ID]", "[Your Client Secret]"))
{
    cc.Load(cc.Web, p => p.Title);
    cc.ExecuteQuery();
    Console.WriteLine(cc.Web.Title);
};

Использование этого субъекта в приложении без использования библиотеки PnP Framework

После создания субъекта и получения согласия вы можете использовать идентификатор и секрет участника для запроса доступа. Класс TokenHelper.cs будет использовать идентификатор и секрет из файла конфигурации приложения.

using Microsoft.SharePoint.Client;
using System;

namespace AzureACSAuth
{
    class Program
    {
        static void Main(string[] args)
        {
            string siteUrl = "https://contoso.sharepoint.com/sites/demo";

            //Get the realm for the URL
            string realm = TokenHelper.GetRealmFromTargetUrl(new Uri(siteUrl));

            //Get the access token for the URL.  
            string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, new Uri(siteUrl).Authority, realm).AccessToken;

            //Create a client context object based on the retrieved access token
            using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken))
            {
                cc.Load(cc.Web, p => p.Title);
                cc.ExecuteQuery();
                Console.WriteLine(cc.Web.Title);
            }
        }
    }
}

Пример app.config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Use AppRegNew.aspx and AppInv.aspx to register client id with secret -->
    <add key="ClientId" value="[Your Client ID]" />
    <add key="ClientSecret" value="[Your Client Secret]" />
  </appSettings>
</configuration>

Примечание.

Вы можете легко вставить класс TokenHelper.cs в проект, добавив в решение пакет nuget AppForSharePointOnlineWebToolkit.