我已经使用网站集/AppRegNew.aspx页面在SharePoint Online中创建了一个应用程序主体,然后使用/appInv.aspx页面使用以下权限XML授予了网站集的应用程序主体FullControl:
<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl"/>
</AppPermissionRequests>
但是,当我尝试使用CSOM和c#(使用TokenHelper.cs)访问该网站集中的列表时,出现错误:
'Access denied. You do not have permission to perform this action or access this resource.'
我还有另一个应用程序负责人,我已授予租户管理员进行测试的权限-如果我使用与该应用程序负责人关联的ClientID和ClientSecret,则我的代码可以正常运行(我正在阅读一些测试列表)
我对AppPermissionRequests XML做错了吗?我还缺少其他步骤吗?我可以使用Tenant Admin App Principal,但我想以“正确”的方式进行操作-从我的研究来看,它似乎应该与SiteCollection FullControl权限一起使用。
我用来尝试访问的示例代码:
Uri siteUri = new Uri("https://MyCompany.sharepoint.com/sites/johntest");
string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);
string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken;
using (ClientContext context = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(), accessToken))
{
Web thisWeb = context.Web;
context.Load(thisWeb);
context.ExecuteQuery();
List roomsList = context.Web.Lists.GetByTitle("Rooms");
context.Load(roomsList);
context.ExecuteQuery();
Console.WriteLine("List retrieved");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>SomeValue</Value></Eq></Where></Query></View>";
ListItemCollection listItems = roomsList.GetItems(camlQuery);
context.Load(listItems);
context.ExecuteQuery();
Console.WriteLine("Query succeeded");
}
因为您正在使用应用程序登录名访问资源,所以通过使用TokenHelper.GetAppOnlyAccessToken,必须将AllowAppOnlyPolicy =“ true”属性添加到AppPermissionRequest。
温馨提示,在AllowAppOnlyPolicy属性为true时,应将客户端ID和客户端机密视为用户名和密码,尤其是在应用程序具有高特权(例如租户管理员或对网站集的完全控制)的情况下。无论如何,应该保护客户端机密,但是,如果AllowAppOnlyPolicy为false,则必须将其与经过身份验证的用户结合使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句