0

我正在尝试使用 Sharepoint 加载项应用程序的访问令牌获取 Sharepoint Online 中的所有站点。当我这样做时,在查看管理门户中的所有站点时,我只能看到 35 个站点中的 17 个。

还值得注意的是,当我使用来自 azure 应用程序的访问令牌时,进行相同的调用时,我会得到所有应用程序。

有什么区别?如何使用 sharepoint 令牌获取所有站点?

这是我可以看到所有站点的管理门户链接:

https://<MY-TENANT>-admin.sharepoint.com/_layouts/15/online/AdminHome.aspx#/siteManagement

这是我创建 Sharepoint 应用程序的地方:

https://<MY-TENANT>-admin.sharepoint.com/_layouts/15/appregnew.aspx

这是我给它的权限:

<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl"/>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl"/>
<AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl"/>
</AppPermissionRequests>

对于正在工作的 Azure 应用程序,我在 azure 门户中注册了该应用程序并分配了以下权限:

MS GRAPH API:
    Profile
    Sites.FullControl.All
    Group.ReadWrite.All
SHAREPOINT API:
    Sites.FullControl.All
    TermStore.Read.All
    User.ReadWrite.All

我在这两种情况下使用的相同的休息电话是:

https://<MY-TENANT>.sharepoint.com/_api/search/query?querytext='contentclass:STS_Site%20contentclass:STS_Web'&selectproperties='UniqueId,Title,SiteName,Path,Description,contentclass'&startrow=0&rowlimit=100

更新:

使用 client_credentials access_token 似乎给了我所有的网站,而 authorization_code access_token 没有......代码流通常更好,理想情况下我会使用它,但也许考虑到应用程序的配置它在这里没有意义?

4

1 回答 1

1

我相信我理解问题所在:

我们试图在应用程序中使用 OAuth 代码流('authorization_code'grant_type)。Sharepoint 确实支持这一点,但是当以这种方式请求访问时,它不支持“完全控制”权限。因此,我们一直在输入“管理”权限。当使用管理权限时,我们有效地减少了我们的权限。这阻止了我们调用路径,例如:/_api/web/roleassignments

当切换到使用 client_credentials 流时,我们开始看到与 azure 应用程序的 access_token 相同的结果。

于 2019-10-09T17:45:02.407 回答