簡體   English   中英

SharePoint Online - 通過CSOM應用程序更新用戶配置文件屬性

[英]SharePoint Online - Update User Profile Properties via CSOM App

我有一個控制台應用程序,我通過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:拒絕訪問。 您無權執行此操作或訪問此資源。

app clientID / clientSecret適用於各種其他基於站點的操作。 是否可以通過clientID / clientSecret在管理站點中加載用戶屬性? 如果是這樣,你能提供一個例子嗎? 如何授予應用程序適當的權限?

如果您為加載項提供了正確的權限:

  1. HTTP://的SharePoint /社會/核心
  2. HTTP://的SharePoint /社會/租戶

那么唯一可能出錯的就是用戶權限。 SharePoint代碼使用權限執行,權限是外接程序權限和當前用戶權限的交集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM