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 站点,其中有一个使用 AadHttpClientSPFx 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:无法按用户将应用程序添加到 MS Teams

WebP 后备图像未加载

如何生成作者链接 - Spfx/React 和 Sharepoint 2019?

如何更改SPFx中的页面导航链接?