如何让我的控制台应用程序获得对Sharepoint Online站点的更新访问权限?

时间:2015-02-24 14:49:37

标签: sharepoint ms-office officedev

在MVA课程的模块2中,标题为“深入挖掘SharePoint数据存储列表”的SharePoint平台构建块和服务(大约45分钟后)Ted Pattison做了一个使用控制台应用程序创建列表的演示在SharePoint Online网站上。课程在http://www.microsoftvirtualacademy.com/training-courses/deep-dive-building-blocks-and-services-of-sharepoint

我正在尝试在我的环境中做同样的事情,但我遇到了麻烦。

在演示中,他访问了_layouts / 15 / AppRegNew.aspx,在app注册表中注册了一个新应用。在演示中,页面顶部有一个“应用类型”单选按钮列表,其中包含“在Web服务器上运行的应用程序”和“在客户端计算机上运行的应用程序”选项。当我在我的网站上访问此页面时,没有这样的单选按钮列表。同样在演示中,Ted将重定向URL留空。在我的网站上,它是必需的:  enter image description here 为了解决这个问题,我输入了我网站的网址(https://mydomain.sharepoint.com/sites/test)。应用ID已成功创建: enter image description here

然后我去了_layouts / 15 / AppInv.aspx来为应用程序提供安全保障。我粘贴在CAML中,为应用程序提供对网络的读取权限:

  <AppPermissionRequests>
    <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="Read" />
  </AppPermissionRequests>

enter image description here 然后通过Clicking Trust It来信任该应用程序:

enter image description here

然后我将App注册中的值复制到app.config中:

 <add key="targetSiteUrl" value="https://xxxxx.sharepoint.com/sites/test"/>
    <add key="clientId" value="bf4c37ef-9202-41ba-8430-3983cba26285"/>
    <add key="clientSecret" value="nKGefHSvT69Ls2rwq1AIVyyHkIwlBzT9UkpbJMUcIbw="/>
    <add key="deleteOnly" value="false"/>

然后根据演示中的内容创建代码以获取网站标题:

static void Main(string[] args)
        {
            string siteUrl = ConfigurationManager.AppSettings["targetSiteUrl"];
            bool deleteOnly = ConfigurationManager.AppSettings["deleteOnly"].Equals("true");


                Uri siteUri = new Uri(siteUrl);
            string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);
            var accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal,
                siteUri.Authority, realm).AccessToken;
            using (var clientContext = TokenHelper.GetClientContextWithAccessToken(siteUrl, accessToken)) {

                var web = clientContext.Web;
                clientContext.Load(web);
                clientContext.ExecuteQuery();

                Console.WriteLine(web.Title);

            }



        }

上面的代码获取领域和访问令牌并成功创建clientContext,但是当我运行executeQuery时,我总是得到错误Microsoft.SharePoint.Client.ServerUnauthorizedAccessException。我试过让应用程序ID完全控制Web,网站集和租户,但我仍然得到同样的错误。

如何让我的控制台应用程序拥有对我网站的更新权限?

1 个答案:

答案 0 :(得分:1)

我在appinv.aspx中添加权限时需要设置AllowAppOnlyPolicy

<AppPermissionRequests AllowAppOnlyPolicy="true" >