錯誤 AADSTS50020 - 來自識別提供者的使用者帳戶不存在於租使用者中

本文可協助您針對身分識別提供者 (IdP) 的來賓使用者無法登入 Azure Active Directory (Azure AD) 中的資源租使用者時所傳回的錯誤碼 AADSTS50020 進行疑難排解。

徵狀

當來賓使用者嘗試存取資源租使用者中的應用程式或資源時,登入會失敗,並顯示下列錯誤訊息:

AADSTS50020:來自識別提供者 {IdentityProviderURL} 的使用者帳戶 ' user@domain.com ' 不存在於租使用者 {ResourceTenantName}中。

當系統管理員檢閱主租使用者的登入記錄時,「90072」錯誤碼專案表示登入失敗。 錯誤訊息會指出:

來自識別提供者 {idp} 的使用者帳戶 {email} 不存在於租使用者 {tenant} 中,且無法存取該租使用者中的應用程式 {appId} ({appName}) 。 帳戶必須先新增為租使用者中的外部使用者。 登出,然後使用不同的 Azure Active Directory 使用者帳戶再次登入。

原因 1:使用不支援的帳戶類型 (多租使用者和個人帳戶)

如果您的應用程式註冊設定為單一租使用者帳戶類型,則來自其他目錄或識別提供者的使用者無法登入該應用程式。

解決方案:變更應用程式註冊資訊清單中的登入物件設定

若要確定您的應用程式註冊不是單一租使用者帳戶類型,請執行下列步驟:

  1. 在Azure 入口網站中,搜尋並選取 [應用程式註冊]

  2. 選取應用程式註冊的名稱。

  3. 在提要欄位中,選取 [ 資訊清單]

  4. 在 JSON 程式碼中,尋找 signInAudience 設定。

  5. 檢查設定是否包含下列其中一個值:

    • AzureADandPersonalMicrosoftAccount
    • AzureADMultipleOrgs
    • PersonalMicrosoftAccount

    如果 signInAudience 設定不包含其中一個值,請選取正確的帳戶類型來重新建立應用程式註冊。 您目前無法在資訊清單中變更 signInAudience

如需如何註冊應用程式的詳細資訊,請參閱快速入門:向Microsoft 身分識別平臺註冊應用程式

原因 2:使用錯誤的端點 (個人和組織帳戶)

如果應用程式註冊支援的帳戶類型設定為下列其中一個值,您的驗證呼叫必須以符合您選取範圍的 URL 為目標:

  • 任何組織目錄中的帳戶 (任何 Azure AD 目錄 - 多租用戶)

  • 任何組織目錄中的帳戶 (任何 Azure AD 目錄 - 多租使用者) 和個人Microsoft帳戶 (例如 Skype、Xbox)

  • 僅限個人Microsoft帳戶

如果您使用 https://login.microsoftonline.com/<YourTenantNameOrID> ,其他組織的使用者就無法存取應用程式。 您必須在要求中指定的租使用者中,將這些使用者新增為來賓。 在此情況下,驗證應該只會在您的租使用者上執行。 如果您預期使用者使用與另一個租使用者或識別提供者的同盟來登入,此案例會造成登入錯誤。

解決方案:使用正確的登入 URL

針對特定應用程式類型使用對應的登入 URL,如下表所列:

應用程式類型 登入 URL
多租使用者應用程式 https://login.microsoftonline.com/organizations
多租使用者和個人帳戶 https://login.microsoftonline.com/common
僅限個人帳戶 https://login.microsoftonline.com/consumers

在應用程式程式碼中,于設定中套用 Authority 此 URL 值。 如需 的詳細 Authority 資訊,請參閱Microsoft 身分識別平臺應用程式組態選項

原因 3:登入錯誤的租使用者

當使用者嘗試存取您的應用程式時,會傳送應用程式的直接連結,或是嘗試透過 https://myapps.microsoft.com 取得存取權。 在這兩種情況下,都會將使用者重新導向以登入應用程式。 在某些情況下,使用者可能已經有使用中會話,其使用的個人帳戶與想要使用的帳戶不同。 或者,雖然他們想要使用個人來賓帳戶,但其會話會使用其組織帳戶 (或反之亦然) 。

若要確定此案例是問題所在,請在錯誤訊息中尋找 User accountIdentity provider 值。 這些值是否符合預期的組合? 例如,使用者是否使用其組織帳戶登入您的租使用者,而不是其主租使用者? 或者,使用者是否使用與已邀請的個人帳戶不同的個人帳戶來登 live.com 入識別提供者?

解決方案:登出,然後從不同的瀏覽器或私人瀏覽器會話再次登入

指示使用者開啟新的私人瀏覽器會話,或讓使用者嘗試從不同的瀏覽器存取。 在此情況下,使用者必須登出其作用中的會話,然後嘗試再次登入。

原因 4:未邀請來賓使用者

嘗試登入的來賓使用者未受邀加入租使用者。

解決方案:邀請來賓使用者

請務必遵循快速入門:將來賓使用者新增至Azure 入口網站中的目錄中的步驟來邀請來賓使用者。

原因 5:應用程式需要使用者指派

如果您的應用程式是需要使用者指派的企業應用程式,如果使用者不在獲指派應用程式存取權的允許使用者清單上,就會發生錯誤 AADSTS50020 。 若要檢查您的企業應用程式是否需要使用者指派:

  1. Azure 入口網站中,搜尋並選取[企業應用程式]

  2. 選取您的企業應用程式。

  3. 在提要欄位中,選取 [ 屬性]

  4. 檢查 [ 需要指派] 選項是否設定為 [ 是]

解決方案:將存取權指派給個別使用者或群組的一部分

使用下列其中一個選項將存取權指派給使用者:

原因 6:嘗試針對個人帳戶使用資源擁有者密碼認證流程

如果使用者嘗試針對個人帳戶使用資源擁有者密碼認證 (ROPC) 流程,則會發生錯誤 AADSTS50020 。 Microsoft 身分識別平臺只支援 Azure AD 租使用者內的 ROPC,而非個人帳戶。

解決方案:使用租使用者或組織專屬的端點

使用租使用者特定端點 (https://login.microsoftonline.com/<TenantIDOrName>) 或組織的端點。 受邀加入 Azure AD 租用戶的個人帳戶無法使用 ROPC。 如需詳細資訊,請參閱 Microsoft 身分識別平臺 和 OAuth 2.0 資源擁有者密碼認證

原因 7:主租使用者系統管理員已重新建立先前刪除的使用者名稱

如果主租使用者的系統管理員重新建立資源租使用者中已刪除的來賓使用者名稱,可能會發生錯誤 AADSTS50020 。 若要確認資源租使用者中的來賓使用者帳戶未與主租使用者中的使用者帳戶相關聯,請使用下列其中一個選項:

驗證選項 1:檢查資源租使用者的來賓使用者是否早于主租使用者的使用者帳戶

第一個驗證選項牽涉到將資源租使用者來賓使用者的年齡與主租使用者的使用者帳戶進行比較。 您可以使用 Microsoft Graph 或 MSOnline PowerShell 進行這項驗證。

Microsoft Graph

發出要求給MS 圖形 API,以檢閱使用者建立日期,如下所示:

GET https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/createdDateTime

然後,根據主租使用者中使用者帳戶的建立日期,檢查資源租使用者中來賓使用者的建立日期。 如果在建立主租使用者的使用者帳戶之前建立來賓使用者,則會確認此案例。

MSOnline PowerShell

注意事項

MSOnline PowerShell 模組設定為已淘汰。 因為它也與 PowerShell Core 不相容,所以請確定您使用的是相容的 PowerShell 版本,以便執行下列命令。

執行 Get-MsolUser PowerShell Cmdlet 來檢閱使用者建立日期,如下所示:

Get-MsolUser -SearchString user@contoso.com | Format-List whenCreated

然後,根據主租使用者中使用者帳戶的建立日期,檢查資源租使用者中來賓使用者的建立日期。 如果在建立主租使用者的使用者帳戶之前建立來賓使用者,則會確認此案例。

驗證選項 2:檢查資源租使用者的來賓替代安全識別碼是否與主租使用者的使用者網路識別碼不同

注意事項

MSOnline PowerShell 模組設定為已淘汰。 因為它也與 PowerShell Core 不相容,所以請確定您使用的是相容的 PowerShell 版本,以便執行下列命令。

當來賓使用者接受邀請時,使用者的 LiveID 屬性 (使用者的唯一登入識別碼) 儲存在 屬性中 AlternativeSecurityIdskey 。 因為使用者帳戶已刪除並在主租使用者中建立, NetID 所以主租使用者中使用者的帳戶值將會變更。 NetID將主租使用者中的使用者帳戶值與儲存在資源租使用者中來賓帳戶內 AlternativeSecurityIds 的金鑰值進行比較,如下所示:

  1. 在主租使用者中,使用 PowerShell Cmdlet 擷取屬性的 Get-MsolUserLiveID

    Get-MsolUser -SearchString tuser1 | Select-Object -ExpandProperty LiveID
    
  2. 在資源租使用者中,將 中的 屬性 AlternativeSecurityIdskey 轉換為 base64 編碼字串:

    [convert]::ToBase64String((Get-MsolUser -ObjectId 01234567-89ab-cdef-0123-456789abcdef
           ).AlternativeSecurityIds.key)
    
  3. 使用 base64.guru) 等線上轉換器 (,將 base64 編碼的字串轉換成十六進位值。

  4. 比較步驟 1 和步驟 3 中的值,以確認它們不同。 在 NetID 刪除並重新建立帳戶時,主租使用者中使用者帳戶的 已變更。

解決方案:重設來賓使用者帳戶的兌換狀態

重設資源租使用者中來賓使用者帳戶的兌換狀態。 然後,您可以保留來賓使用者物件,而不需要刪除並重新建立來賓帳戶。 您可以使用Azure 入口網站、Azure PowerShell或Microsoft 圖形 API重設兌換狀態。 如需指示,請 參閱重設來賓使用者的兌換狀態

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 社群支援