为应用程序分配单个Sharepoint站点的权限

最近工作需要在Sharepoint Online上建立一个站点用于信息同步。另一个租户下有一个站点的信息将需要同步到这个新站点中。

为此,我们需要新建一个应用程序用于数据同步。这个可以在Microsoft Entra admin center中完成。找到Applications--App registrations在这里新建一个应用程序就可以了。然后再进入这个程序为它配置权限,在API permission中添加一个权限,选中Sharepoint--Application permissions中的Sites.Selected。添加完毕后,看上去是这个样子的。

接下去,要为这个程序分配站点的读写权限。微软有一篇文章说明,如何配置权限

https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins-modernize/understanding-rsc-for-msgraph-and-sharepoint-online

其中提到需要用Microsoft Graph API 发送一个POST请求,需要提供程序的Client ID,Display Name,赋予的角色名字,发送到这个站点所对应的URL。其中Application(Client) ID 和Display Name在API程序的总览里面就能看到了,如图。

但是URL中需要填写的siteId没有办法直接看到,需要自己查询。按之前文章中的示例,应当是三段组成的。比如,contoso.sharepoint.com,5a58bb09-1fba-41c1-8125-69da264370a0,9f2ec1da-0be4-4a74-9254-973f0add78fd。在获取这个siteID的时候遇到了不少麻烦。

微软也给出了一篇文章来说,如何查询这个siteID。https://learn.microsoft.com/en-us/graph/api/site-list?view=graph-rest-1.0&tabs=http
因为更熟悉powershell,自然我先尝试用Get-Mgsite或者Get-Mgallsite来获取信息。当用示例命令时可以获取站点URL,但是想更进一步列出所有站点和ID的时候,遇到了403错误,经过反复检查,当前连接的账户权限是足够的,并非权限问题。

经过查找,发现有一篇文章说明,Delegated auth flow is not supported for the getAllSites function。需要用支持客户端验证的工具比如Postman,Graph SDK这样的。或者可以在Graph Explorer中使用搜索的功能。

https://learn.microsoft.com/en-us/answers/questions/1304396/sites-getallsites-returns-access-denied

看到这里,既然是Powershell无法支持,那么就用其它工具吧。几经尝试,还是Graph Explorer更为简单方便。步骤如下:

首先,访问微软提供的在线工具

https://developer.microsoft.com/en-us/graph/graph-explorer

在右上方登录有权限的账户,Modify permission这里授予读写权限,因为等一下获得SiteID后还要修改权限。这里我搜索得到了名为Products的这个站点的信息,搜索语句如下:

https://graph.microsoft.com/v1.0/sites?Search=Products

有了SiteId后,再按照之前文章中给出的JSON示例,填写role,clientId,application-name之后发送POST请求。查看返回结果,显示设置成功。

 

posted @   qishine  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示