我正在尝试自动提供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的,这不能解决我的问题。
答案 0 :(得分:0)
第二种方法中使用的令牌与应用程序客户端ID 有关。
因此,Azure应用程序需要与用户相似的必要权限。在Azure门户/ Azure Active Directory中,我为我用来登录和获取访问令牌的应用程序授予了AllSites.FullControl权限。
此问题已解决。