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

У меня есть функция Azure 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
        }

Точное сообщение об ошибке: System.Private.CoreLib: исключение при выполнении функции: FunctionName. Microsoft.SharePoint.Client.Runtime: доступ запрещен. У вас нет разрешения на выполнение этого действия или доступ к этому ресурсу.

Класс AuthenticationManager взят из документов MS из здесь Я использую пакет Nuget Microsoft.SharePointOnline.CSOM v16.1.20518.12000.

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


person asd    schedule 29.10.2020    source источник


Ответы (1)


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

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

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

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

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

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

Здесь диспетчер аутентификации относится к библиотеке SharepointPNPcoreOnline.

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

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

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

person Satya V    schedule 02.11.2020