(Снято!) Предоставление доступа с помощью sharePoint Azure ACS App-Only

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

Важно!

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

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

Для новых клиентов приложения, использующие маркер доступа только для приложений ACS, по умолчанию отключены. Рекомендуется использовать модель разрешений приложения Entra ID , которая является современной и более безопасной. Но вы можете изменить поведение, запустив 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.