使用ADAL访问令牌创建的SharePoint ClientContext的授权问题

时间:2019-03-05 13:07:25

标签: sharepoint token adal csom unauthorized

我正在尝试自动提供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身份验证,并且只有访问令牌。因此,我必须使用此令牌创建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;

通过这种方式中获取可以正常工作,但是如果我尝试 _set _ 诸如创建子网站或将母版页部署到目录库 em>我正在获得401,如下所示。 访问被拒绝。您没有执行此操作或访问此资源的权限

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

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

1 个答案:

答案 0 :(得分:0)

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

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

此问题已解决。