【问题标题】:Azure Active Directory exception thrown while fetching access token获取访问令牌时抛出 Azure Active Directory 异常
【发布时间】:2023-02-01 22:53:50
【问题描述】:

我正在尝试使用 GetAccessTokenForUserAsync() 在我的 C# 应用程序中获取图形 API 访问令牌。

它抛出以下错误:

错误 = invalid_grant Error_description = "AADSTS50020: 来自身份提供者'https://sts.windows.net/ 的用户帐户'{EmailHidden}'--/' does not exist in tenant 'ABC' and cannot access the application '--**-****'(xyz-app) 在该租户中。需要先在租户中将账号添加为外部用户。注销并使用不同的 Azure Active Directory 用户帐户重新登录

【问题讨论】:

  • 用户是否存在于您使用的目录中?您使用什么身份验证方法?
  • 用户存在于自己的租户中。我正在使用 (tokenAcquisition.GetAccessTokenForUserAsync)
  • var confidentialClientApplication = ConfidentialClientApplicationBuilder .Create(_azureAd.ClientId) .WithTenantId(tenantId) .WithClientSecret(_azureAd.ClientSecret) .Build();尝试 { _tokenAcquisition.GetAccessTokenForUserAsync(scopes).ConfigureAwait(false).GetAwaiter().GetResult(); } 赶上(异常前){ }
  • 该应用程序是否已注册为多租户应用程序? IE。它是否允许从其他目录登录或仅允许在其中创建应用程序的目录登录?
  • 错误消息很清楚,在应用程序中登录的用户在 azure 广告应用程序注册的租户中不存在。您必须在租户中有一个Azure 广告应用程序,请使用同一租户中的用户帐户登录。

标签: azure asp.net-core azure-active-directory microsoft-graph-api


【解决方案1】:

我试图在我的环境中重现相同的内容并得到如下相同的错误:

如果用户和应用程序存在于不同的租户中,通常会发生此错误。确保检查用户是否存在于 Azure AD 应用程序租户中。尝试登录和退出。

检查是否登录网址您使用的是有效的:

  • 多租户应用程序 https://login.microsoftonline.com/organizations

  • 多租户和个人账户 https://login.microsoftonline.com/common

  • 仅限个人账户 https://login.microsoftonline.com/consumers

请检查是否来宾用户已被邀请到租户如下所示:

  • 尝试清除浏览器 cookies/通过隐身登录.
  • 您还可以利用domain_hint指定 Azure AD 用户应来自哪个域的参数。您可以从客户端和服务器端进行配置。

如果问题仍然存在,请参考以下 MsDoc:

Error AADSTS50020 - User account from identity provider does not exist in tenant - Active Directory

【讨论】:

  • 我可以通过我的租户登录。我有角度应用程序和后端 .Net 核心应用程序。我首先使用我的后端应用程序的 login.microsoft.com/my tenantId / client Id 向我的新租户授予管理员许可。入职成功。登录后,我尝试使用 tokenAquisition.GetAccessTokenForUserAsync(我的租户 ID)从图形 API 获取我的用户。它通过给出我写在上面的异常而失败。
猜你喜欢
  • 2018-02-17
  • 2020-05-25
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 2019-08-25
  • 2019-11-06
相关资源
最近更新 更多