【发布时间】:2021-05-28 21:49:27
【问题描述】:
我有一个 Teams Tab 应用程序,它需要对团队的网站进行一些操作。 用户需要经过身份验证,所有操作都是代表用户执行的。
调用图形 API 有一些记录,我在这里找到了一篇很好的文章,例如: https://bob1german.com/2020/08/31/calling-microsoft-graph-from-your-teams-application-part3/
但我想直接调用 SharePoint REST API,而不是通过图形 API,因为我想做一些图形 API 不支持的操作(还没有?),例如创建页面。
我怎样才能做到这一点?
据我了解,我需要将从团队获得的令牌交换为可用于调用 SharePoint 的另一个令牌。 (on_behalf_of 流)。我将 SharePoint 的范围添加到应用程序注册中,并在交换令牌时请求这些范围(例如https://microsoft.sharepoint-df.com/AllSites.Read)。但我不断收到 401 访问被拒绝。
请注意,这不是关于调用图形 API。这是关于“正常”的 SharePoint REST API。对于调用图形 API,它可以工作。
更多细节和 REST 调用: https://gist.github.com/nbelyh/ec17a4e398069e35c2a2a5dc4447fb2a
【问题讨论】:
-
据我记得,使用仅应用程序身份验证调用共享点休息端点需要使用证书。不允许使用 appsecret。
-
我不想只使用应用程序调用 SharePoint,我想代表用户调用它。基本上,将我从团队获得的用户令牌换成适合调用 SharePoint REST API 的令牌。许多文章都在解释如何为图形 API 执行此操作(如描述中的文章),但我没有找到任何解释 SharePoint REST API 的文章。并且令牌似乎不兼容。或者也许我错过了什么?
-
您是否在清单中专门使用“microsoft.sharepoint-df.com/AllSites.Read”作为您的权限?如果是这样,您需要将域替换为您的目标租户域。您可能还需要进入 Azure 门户,查看您的 Teams 应用程序是否已批准目标 SharePoint 权限。
-
@JeremyKelley-Microsoft 感谢您的评论。是的,我用过那个。但它是一个团队应用程序,应该适用于任何客户域...我的意思是,我不知道客户的域是什么,所以我不能将其添加到应用程序注册中?
-
这可能需要来自更了解 Teams 应用流程的 Teams 团队的意见。您也可以尝试:“https://”+域+“/.default”作为您的范围,然后只要在 AAD 中授予您想要的权限,它就可以工作。
标签: sharepoint azure-active-directory microsoft-teams sharepoint-rest-api