SharePoint Online-通过CSOM应用程序更新用户配置文件属性



我有一个控制台应用程序,通过CSOM更新SharePoint Online用户配置文件属性。当我通过下面的代码(使用用户名和密码)进行操作时,它运行得很好。

private static void UpdateUserProfileProperties()
{
var userAccountName = "i:0#.f|membership|myAccounName@mySite.com";
var siteUrl = "https://mySite-admin.sharepoint.com";
var myUserName = "myUserName";
var myPassword = "myPassword";
var secureStringPassword = new SecureString();
myPassword.ToList().ForEach(c => secureStringPassword.AppendChar(c));
using (var context = new ClientContext(siteUrl))
{
var credentials = new SharePointOnlineCredentials(myUserName, secureStringPassword);
context.Credentials = credentials;
var peopleManager = new PeopleManager(context);
var personProperties = peopleManager.GetPropertiesFor(userAccountName);
context.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
context.ExecuteQuery();
}
}

现在,我已经在SharePoint中创建了一个应用程序(通过AppRegNew.aspx页面)。我授予了应用程序租户级别的权限(通过AppInv.aspx页面)和以下权限请求XML:

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

现在,我使用clientID/clientSecret进行身份验证,而不是使用用户名和密码-使用以下代码:

public static void UpdateUserProfileProperties2()
{
var userAccountName = "i:0#.f|membership|myAccounName@mySite.com";
var siteUrl = "https://mySite-admin.sharepoint.com";
var siteUri = new Uri(siteUrl);
var siteRealm = TokenHelper.GetRealmFromTargetUrl(siteUri);
var siteToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, siteRealm).AccessToken;
using (var context = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(), siteToken))
{
var peopleManager = new PeopleManager(context);
var personProperties = peopleManager.GetPropertiesFor(userAccountName);
context.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
context.ExecuteQuery();
}
}

我可以很好地获取令牌和上下文。当行context.ExecuteQuery();执行时,我得到以下异常:

Microsoft.SharePoint.Client.ServerUnauthorizedAccessException:访问被拒绝。您没有执行此操作或访问此资源的权限。

应用程序clientID/clientSecret适用于各种其他基于站点的操作。是否可以通过clientID/clientSecret在管理站点中加载用户属性?如果是,你能举个例子吗?如何授予应用程序适当的权限?

如果您给您的加载项正确的权限:

  1. http://sharepoint/social/core
  2. http://sharepoint/social/tenant

那么唯一可能出错的就是用户权限。SharePoint代码使用外接程序权限和当前用户权限的交叉权限执行。

相关内容

  • 没有找到相关文章

最新更新