Функция Azure, обновляющая профиль пользователя с помощью SharePoint Online и CSOM .NET Standard, дает отказ в доступе

#c# #azure-functions #sharepoint-online #csom #.net-standard-2.0

#c# #azure-функции #sharepoint-online #csom #.net-standard-2.0

Вопрос:

У меня есть Azure Function v3, и я хочу обновить свойства профиля пользователя Sharepoint с помощью CSOM и .NET standard 2.0, используя учетные данные глобальной учетной записи администратора. Чтение работает.

         var site = new Uri("https://domain-admin.sharepoint.com");
        using (var authenticationManager = new AuthenticationManager())
        using (var context = authenticationManager.GetContext(site, user, password))
        {
            var peopleManager = new PeopleManager(context);

            var personProperties = peopleManager.GetPropertiesFor(accountName);
            context.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
            await context.ExecuteQueryAsync();
            Console.WriteLine(personProperties.UserProfileProperties["FirstName"]); //works
            peopleManager.SetSingleValueProfileProperty(personProperties.AccountName, "FirstName", "CSOMvalue");
            await context.ExecuteQueryAsync(); //error, access denied
        }
  

Точное сообщение об ошибке: система.Частное.CoreLib: исключение при выполнении функции: functionName. Майкрософт.SharePoint.Клиент.Время выполнения: доступ запрещен. У вас нет разрешения на выполнение этого действия или доступ к этому ресурсу.

Класс AuthenticationManager взят из MS docs отсюда, я использую Microsoft.SharePointOnline.Пакет nuget CSOM v16.1.20518.12000.

Я создал веб-приложение .NET Framework 4.7.2, и оно работало с использованием SharePointOnlineCredentials. Но я хочу знать, как заставить его работать на .NET Standard 2.0.

Ответ №1:

Из моего прошлого опыта и нескольких часов исследований :

При использовании приложения Azure AD можно просматривать профили пользователей, но не выполнять операцию записи CSOM.

ссылка :
введите описание изображения здесь

Хотя в статье говорится, что это применимо только для использования приложений, такое поведение наблюдается в приложении Azure AD в целом (пользователь приложение также) — отсюда и причина, по которой вы можете читать, но не писать.

Как упоминалось в статье, вам потребуется только контекст приложения Sharepoint и выполнить операцию чтения / записи.

 context = new AuthenticationManager().GetAppOnlyAuthenticatedContext(siteUrl, "[Your Client ID]", "[Your Client Secret]")
  

Здесь authenticationmanager принадлежит библиотеке SharepointPNPcoreOnline.

введите описание изображения здесь

В этой статье подробно описано то же самое.

Если вы хотите, чтобы пользовательский контекст выполнял то же самое (обычно это не требуется, поскольку вы повторно выполняете UPA) — вы можете создать приложение соответствующим образом, но на самом деле не уверен, поддерживает ли SharepointPNPCOreOnline это.