簡體   English   中英

MSTeams 桌面客戶端中的 SPFx webpart 拋出 UnauthorizedAccessException

[英]SPFx webpart in MSTeams Desktop Client throws an UnauthorizedAccessException

這個問題與之前在 StackOverflow 上提出的問題非常相似。 但是,我得到的錯誤是不同的。

在 MSTeams 桌面客戶端中使用 SPFx webpart 加載 SP 頁面時,AadHttpClient 失敗

我還有一個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 上。

更新:10/02/2020

另一個觀察:我們在不同的租戶(個人租戶而不是我們的公司租戶)上嘗試了相同的設置。 我們注意到,當在 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

我最近遇到了一個調用 graphAPI 的 Web 部件的類似問題。 在桌面團隊中,呼叫從來不會發生,而且常常會卡住。 我能夠按照以下步驟修復它:-

第 1 步。訪問租戶管理站點上新的 API 權限管理頁面。 這會在幕后創建一個客戶端機密。

步驟 2. 轉到 -> https://aad.portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps

步驟 3. 單擊SharePoint Online Client Extensibility Web Application Principal

步驟 4. 單擊左側菜單中的清單 步驟 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參考了上述步驟

最后我有一個解決方案:

  1. 刪除應用程序 SharePoint Online 客戶端擴展性 Web 應用程序主體和 SharePoint Online 客戶端擴展性 Web 應用程序主體幫助程序
  2. 等待幾分鍾,讓 AAD 再次創建它們。
  3. 之后請求自定義應用程序的許可。
  4. 轉到 API 訪問頁面再次授予權限將自動同步到“SharePoint Online 客戶端擴展性 Web 應用程序主體”。
  5. 再次測試應用程序。 同時停用受限訪問用戶權限鎖定模式可能會有幫助。 現在我所有的應用程序都按預期工作。

為什么?

  1. 受限訪問用戶權限鎖定模式可能會阻止您請求 api 的權限。
  2. 刪除 AAD 中的應用程序以獲取令牌並再次同步所有配置。
  3. 從 API 訪問獲得大權限的方式更正,而不是從 AAD 應用程序授予。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM