#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 это.