【问题标题】:Authorization problem with SharePoint ClientContext created with ADAL Access Token使用 ADAL 访问令牌创建的 SharePoint ClientContext 的授权问题
【发布时间】:2019-07-26 23:11:21
【问题描述】:

我正在尝试自动提供 SharePoint Online 网站集。我正在使用 SharePoint CSOM 进行操作。如果我创建 ClientContext(Microsoft.SharePoint.Client) 对象 使用 SharePointOnlineCredentials,一切都可以正常工作,例如创建子站点/列表/库、上传自定义母版页、设置 Web 属性等。(顺便说一下,我们使用的是发布站点)

ClientContext ctx = new ClientContext(contextWebUrl);

SecureString sec_pass = new SecureString();
Array.ForEach(contextPassword.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
ctx.Credentials = new SharePointOnlineCredentials(contextUserName, sec_pass);

return ctx;

但我在生产环境中没有用户密码,因为我们必须使用 ADAL 身份验证,而且我们只有 Access Token。所以我必须使用这个令牌来创建 ClientContext 对象。喜欢;

ClientContext ctx = new ClientContext(siteUrl);
ctx.ExecutingWebRequest += delegate (object sender, WebRequestEventArgs e)
      {
           e.WebRequestExecutor.WebRequest.Headers.Add("Authorization", "Bearer " + siteToken.AccessToken);

           if (digestValue != null)
            {
               e.WebRequestExecutor.WebRequest.Headers.Add("X-RequestDigest", digestValue.FormDigestValue);
               e.WebRequestExecutor.WebRequest.Accept = "application/json;odata=verbose";
            }
       };
return ctx;

通过这种方式获取来自 SharePoint 的东西可以工作,但是如果我尝试 _set_ 一些东西,例如创建子网站或将母版页部署到 目录库 em> 我得到 401 如下。 访问被拒绝。您无权执行此操作或访问此资源

我认为这是一个更新问题,但即使我使用了 X-RequestDigest 也没有任何改变。

有些人在上传文档时遇到了同样的问题,但所有答案都是关于直接使用rest api,这不能解决我的问题。

【问题讨论】:

    标签: sharepoint token adal csom unauthorized


    【解决方案1】:

    第二种方法中使用的令牌与应用程序客户端ID有关。

    因此,Azure 应用程序需要与用户类似的必要权限。在 Azure 门户/Azure Active Directory 中,我向用于登录和获取访问令牌的应用程序授予 AllSites.FullControl 权限。

    至此这个问题已经解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      相关资源
      最近更新 更多