AADSTS50020错误 - 租户中不存在标识提供者的用户帐户

本文可帮助你排查标识提供者 (IdP) 的来宾用户无法登录到 Microsoft Entra ID 中的资源租户时返回的错误代码AADSTS50020

症状

当来宾用户尝试访问资源租户中的应用程序或资源时,登录失败,并显示以下错误消息:

AADSTS50020:租户 {ResourceTenantName} 中不存在标识提供者 {IdentityProviderURL} 中的用户帐户user@domain.com“”。

当管理员查看主租户上的登录日志时,“90072”错误代码条目表示登录失败。 错误消息指出:

租户 {tenant} 中不存在来自标识提供者 {idp} 的用户帐户 {email},并且无法访问该租户中的应用程序 {appId} ({appName}) 。 首先需要将该帐户添加为租户中的外部用户。 使用其他Microsoft Entra用户帐户注销并再次登录。

原因 1:用户使用个人 Microsoft 帐户登录到Microsoft Entra 管理中心

当你尝试使用个人 Microsoft 帐户 (Outlook、Hotmail 或 OneDrive) 登录到 Microsoft Entra 管理中心 时,默认情况下,你已连接到 Microsoft 服务租户。 在默认租户中,没有用于执行任何操作的链接目录。 此行为在意料之中。

在以前的体验中,目录 (例如:UserNamehotmail735.onmicrosoft.com) 创建并链接到个人帐户,你可以执行操作,例如在目录中创建用户帐户。 行为现已更改。

解决方案:使用新租户Create Azure 帐户

如果想要有一个目录,则必须创建一个 Azure 帐户和一个新租户:

  1. 浏览到 https://azure.microsoft.com/en-us/free/,然后选择“ 开始免费 ”。
  2. 按照说明创建 Azure 帐户。
  3. 租户将与 Azure 帐户一起生成,并且会自动将你指定为全局管理员。 这授予你对此租户内所有选项的完全访问权限。

原因 2:使用不受支持的帐户类型 (多租户和个人帐户)

如果应用注册设置为单租户帐户类型,则来自其他目录或标识提供者的用户无法登录到该应用程序。

解决方案:更改应用注册清单中的登录受众设置

若要确保应用注册不是单租户帐户类型,请执行以下步骤:

  1. 在Azure 门户中,搜索并选择“应用注册”。

  2. 选择应用注册的名称。

  3. 在边栏中,选择“ 清单”。

  4. 在 JSON 代码中,找到 signInAudience 设置。

  5. 检查设置是否包含以下值之一:

    • AzureADandPersonalMicrosoftAccount
    • AzureADMultleOrgs
    • PersonalMicrosoftAccount

    如果 signInAudience 设置不包含这些值之一,请通过选择正确的帐户类型来重新创建应用注册。 当前无法更改清单中的 signInAudience

有关如何注册应用程序的详细信息,请参阅快速入门:使用Microsoft 标识平台注册应用程序

原因 3:使用错误的终结点 (个人和组织帐户)

如果应用注册支持的帐户类型设置为以下值之一,则身份验证调用必须面向与所选内容匹配的 URL:

  • 任何组织目录中的帐户 (任何Microsoft Entra目录 - 多租户)

  • 任何组织目录中的帐户 (任何Microsoft Entra目录 - 多租户) 和个人 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 标识平台应用程序配置选项

原因 4:登录到错误的租户

当用户尝试访问你的应用程序时,他们要么被发送到应用程序的直接链接,要么他们尝试通过 https://myapps.microsoft.com获取访问权限。 无论哪种情况,用户都将被重定向以登录到应用程序。 在某些情况下,用户可能已有一个活动会话,该会话使用与要使用的个人帐户不同的会话。 或者,他们有一个会话使用其组织帐户,尽管他们打算使用个人来宾帐户 (反之亦然) 。

若要确保此方案是问题,请在错误消息中查找 User accountIdentity provider 值。 这些值是否与预期的组合匹配? 例如,用户是否使用其组织帐户登录到你的租户而不是其主租户? 或者用户是否使用与已邀请的标识提供者不同的个人帐户登录到live.com标识提供者?

解决方案:注销,然后从其他浏览器或专用浏览器会话再次登录

指示用户打开新的专用浏览器会话,或让用户尝试从其他浏览器进行访问。 在这种情况下,用户必须从其活动会话中注销,然后再次尝试登录。

原因 5:未邀请来宾用户

尝试登录的来宾用户未被邀请到租户。

解决方案:邀请来宾用户

请确保按照快速入门:将来宾用户添加到Azure 门户中的目录中的步骤来邀请来宾用户。

原因 6:应用需要用户分配

如果应用程序是需要用户分配的企业应用程序,则如果用户不在被分配有应用程序访问权限的允许用户列表中,则会发生错误 AADSTS50020 。 若要检查企业应用程序是否需要用户分配,请执行以下操作:

  1. Azure 门户中,搜索并选择“企业应用程序”。

  2. 选择企业应用程序。

  3. 在边栏中,选择“ 属性”。

  4. 检查“ 需要分配” 选项是否设置为“ ”。

解决方案:单独或作为组的一部分向用户分配访问权限

使用以下选项之一向用户分配访问权限:

原因 7:尝试对个人帐户使用资源所有者密码凭据流

如果用户尝试将资源所有者密码凭据 (ROPC) 流用于个人帐户,则会发生错误 AADSTS50020 。 Microsoft 标识平台仅在Microsoft Entra租户中支持 ROPC,不支持个人帐户。

解决方案:使用特定于租户或组织的终结点

使用特定于租户的终结点 (https://login.microsoftonline.com/<TenantIDOrName>) 或组织的终结点。 受邀加入Microsoft Entra租户的个人帐户无法使用 ROPC。 有关详细信息,请参阅 Microsoft 标识平台 和 OAuth 2.0 资源所有者密码凭据

原因 8:以前删除的用户名由主租户管理员重新创建

如果主租户的管理员重新创建在资源租户中删除的来宾用户的名称,则可能会发生错误 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

然后,根据主租户中用户帐户的创建日期检查资源租户中的来宾用户的创建日期。 如果在创建主租户的用户帐户之前创建了来宾用户,则会确认方案。

注意

自 2024 年 3 月 30 日起,Azure AD 和 MSOnline PowerShell 模块已弃用。 若要了解详细信息,请阅读 弃用更新。 在此日期之后,对这些模块的支持仅限于 Microsoft Graph PowerShell SDK 和安全修补程序的迁移帮助。 弃用的模块将继续运行到 2025 年 3 月 30 日。

建议迁移到 Microsoft Graph PowerShell,以便与以前为 Azure AD) Microsoft Entra ID (交互。 有关常见的迁移问题,请参阅 迁移常见问题解答注意: MSOnline 1.0.x 版可能会在 2024 年 6 月 30 日之后遇到中断。

验证选项 2:检查资源租户的来宾备用安全 ID 是否与主租户的用户净 ID 不同

注意

MSOnline PowerShell 模块已设置为已弃用。 由于它也与 PowerShell Core 不兼容,因此请确保使用兼容的 PowerShell 版本,以便可以运行以下命令。

当来宾用户接受邀请时,用户的 LiveID 属性 (用户) 的唯一登录 ID 存储在 AlternativeSecurityIds 属性 key 中。 由于用户帐户已删除并在主租户中创建, NetID 因此主租户中用户的帐户值将发生更改。 将 NetID 主租户中用户帐户的值与资源租户中来宾帐户中 AlternativeSecurityIds 存储的密钥值进行比较,如下所示:

  1. 在主租户中,使用 Get-MsolUser PowerShell cmdlet 检索 属性的值LiveID

    Get-MsolUser -SearchString tuser1 | Select-Object -ExpandProperty LiveID
    
  2. 在资源租户中,将 中的 AlternativeSecurityIds 属性的值key转换为 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 社区支持。 还可以向 Azure 反馈社区提交产品反馈。