MSTeams 桌面客户端中的 SPFx webpart 引发 UnauthorizedAccessException
Posted
技术标签:
【中文标题】MSTeams 桌面客户端中的 SPFx webpart 引发 UnauthorizedAccessException【英文标题】:SPFx webpart in MSTeams Desktop Client throws an UnauthorizedAccessException 【发布时间】:2020-05-08 16:08:46 【问题描述】:这个问题与之前在 *** 上提出的问题非常相似。但是,我得到的错误是不同的。
AadHttpClient fails when loading SP page with SPFx webpart in MSTeams Desktop Client
我还有一个 Sharepoint Online 站点,其中有一个使用 AadHttpClient 的 SPFx Web 部件。
如果我从浏览器导航到 Sharepoint 站点或打开 MS Teams Web 客户端,则此 Web 部件有效。
一瞥我的设置:
这是我面临的问题的“重现步骤”概述。
将 Web 部件部署到 SharePoint 在 SharePoint 中查看 Web 部件 - Web 部件显示并正常加载 在 Teams 中添加 SharePoint 选项卡并将其绑定到带有 Web 部件的页面 在 Teams Desktop 客户端中查看选项卡 - 数据无法加载到 Web 部件中(请参阅下文) 在 Teams Web 客户端中查看选项卡 - Web 部件显示并正常加载当我调试 MS Teams 桌面客户端时,我在“网络请求”选项卡中进行了此调用:
https://mytenant.sharepoint.com/sites/mysite/_api/Microsoft.SharePoint.Internal.ClientSideComponent.Token.AcquireOBOToken?resource=GUID of my AAD app registration&clientId=GUID of SharePoint Online Client Extensibility AAD app registration
响应:
错误 403:
"odata.error":"code":"-2147024891, System.UnauthorizedAccessException","message":"lang":"en-US","value":"访问 否认。您无权执行此操作或访问 这个资源。"
一个有趣的观察是,这个 Web 请求只发生在 Microsoft Teams 桌面客户端中。
我很想知道为什么这只发生在 MS Teams 桌面客户端,而不是 MS Teams Web 客户端或 Sharepoint Online。
更新:2020 年 10 月 2 日
另一个观察结果:我们在不同的租户(个人租户而不是我们的公司租户)上尝试了相同的设置。我们注意到,当在 Azure Active Directory 上打开 MFA 时,可能会重现相同的行为。
失败的请求是:
https://personal tenant.sharepoint.com/sites/site name/_api/Microsoft.SharePoint.Internal.ClientSideComponent.Token.AcquireOBOToken?resource=GUID of the AD app registration&clientId=GUID of the SPO Client Extensibility app registration
但是,现在返回的错误是 500 响应:
"odata.error":"code":"-1, System.AggregateException","message":"lang":"en-US","value":"一个或 出现更多错误。"
在 Github 上发现了类似的问题(但出现了不同的错误):https://github.com/SharePoint/sp-dev-docs/issues/4915
【问题讨论】:
能否请您检查一下 this.context.pageContext.web.absoluteUrl;你得到什么网址? @Trinetra-MSFT 当然可以。我检查了网络和桌面客户端。我得到的值是:https://TENANT.sharepoint.com/sites/SA
很高兴根据需要提供更多详细信息
如果你得到的 url 相同,那肯定是访问问题。您能否检查您是否具有访问共享点资源的适当权限?当 webpart 托管在 sharepoint 应用程序目录中时,可以选择与 sharepoint 应用程序目录中的团队同步。我假设你已经做到了。这也可能导致未经授权的访问。
@Trinetra-MSFT 是的,我可以访问 Sharepoint 资源。事实上,我自己部署了 Web 部件。但是,我在 Sharepoint 应用程序目录中看不到“同步到团队”按钮。我是否应该向租户的全局管理员询问特定权限?另外,您知道为什么 Web 部件可以在 Teams 的 Web 客户端上运行,而不是在桌面客户端上运行吗?
与 Teams 同步将在 sharepoint 应用目录中提供。如果不是,则可能是您创建了 SPFx webpart 项目 v1.7。仍然很少快速检查您是否在清单文件的 validDomain[] 列表中添加了共享点 URL?这是creating web part for teams tab 和creating the manifest for webpart 的链接。
【参考方案1】:
我最近遇到了一个调用 graphAPI 的 webpart 的类似问题。在桌面团队中,电话永远不会发生,而且会卡住。我可以通过以下步骤修复它:-
步骤 1. 访问租户管理站点上的新 API 权限管理页面。这会在幕后创建一个客户端机密。
第 2 步。转到 -> https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
第 3 步。点击SharePoint Online Client Extensibility Web Application Principal
Step 4. 点击左侧菜单中的 Manifest Step 5. 从 oAuth2Permission 数组中复制 id
"oauth2Permissions": [
"adminConsentDescription": "Allow the application to access SharePoint Online Client Extensibility Web Application Principal on behalf of the signed-in user.",
"adminConsentDisplayName": "Access SharePoint Online Client Extensibility Web Application Principal",
"id": "2143704b-186b-4210-b555-d03aa61823cf",
"isEnabled": true,
"lang": null,
"origin": "Application",
"type": "User",
"userConsentDescription": "Allow the application to access SharePoint Online Client Extensibility Web Application Principal on your behalf.",
"userConsentDisplayName": "Access SharePoint Online Client Extensibility Web Application Principal",
"value": "user_impersonation"
],
步骤 6. 将“preAuthorizedApplications”条目替换为以下 json。保留 appId 如下所示。
"preAuthorizedApplications": [
"appId": "00000003-0000-0ff1-ce00-000000000000",
"permissionIds": [
"YOUR COPIED ID FROM STEP 5"
]
],
第 7 步。点击保存。
让我知道这是否适合您。我从https://github.com/SharePoint/sp-dev-docs/issues/3923#issuecomment-514726341引用了上述步骤
【讨论】:
这是解决问题的方法吗?我在清单文件中有相同的设置,但仍然无法正常工作。以上是关于MSTeams 桌面客户端中的 SPFx webpart 引发 UnauthorizedAccessException的主要内容,如果未能解决你的问题,请参考以下文章
MSAL 登录弹出窗口不起作用 - MSTeams 桌面和移动应用程序
MS Teams:无法按用户将应用程序添加到 MS Teams