Azure AD (Active Directory) 中的多租户应用因 AADSTS50020 而失败

Multi-tenant app in Azure AD (Active Directory) fails with AADSTS50020

我在我们组织的 "xxx.onmicrosoft.com" Azure Active Directory 中创建了一个 "Web app / API" 应用程序。该应用程序的 "Multi-tenanted" 属性 已设置为 "Yes"。

我们将 OpenID Connect(我们使用 https://github.com/mitreid-connect/)配置为使用以下 URLs:

请注意,我们在 URL 中使用了 "common" 而没有使用 "xxx.onmicrosoft.com",因为我们希望来自外部 "xxx.onmicrosoft.com" 的人能够进行身份验证并访问我们的应用程序。

使用这些设置,来自 xxx.onmicrosoft.com 的人可以正确验证和访问该应用程序。

但是,当我使用个人 live.com 帐户(用户名 xxx@gmail.com)访问该应用程序时,出现 AADSTS50020 错误。我能够正确地使用我的 xxx@gmail.com 帐户进行身份验证,但我没有被重定向到回复 URL。我被困在 Microsoft 的网页上,出现以下错误消息:

AADSTS50020: User account 'xxx@gmail.com' from identity provider 'live.com' does not exist in tenant 'xxx.onmicrosoft.com' and cannot access the application '391e7103-ZZZZ-zz87-xxxx-7xxxxxd5xxxx' in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with a different Azure Active Directory user account.

如果我希望来自任何身份提供商的人能够访问我的应用程序,我需要更改什么配置?

如前所述here,我希望任何地方的人都可以访问我的应用程序,而无需我进行更多配置。

我问这个问题是因为我正在获得 AppSource 的认证,目前这使我无法这样做。

AppSource 只需要工作帐户登录。您正在使用 @gmail 帐户 - 这是一个个人帐户 - 因为除了 common (https://login.microsoftonline.com/common), 不接受个人账户直接登录 - 只接受工作账户。

您有三个选择:

  1. 如果登录个人帐户不是您申请的要求,那么您可以继续使用v1端点并使用工作帐户sign-in/test 你的申请。这将使您为 AppSource 认证做好准备。
  2. 如果除了工作帐户之外,您还需要/希望在您的应用程序中允许使用个人帐户,那么您可以考虑使用 v2 端点(https://login.microsoftonline.com/common/v2.0) for Azure Active Directory. The v2 endpoint allow both personal accounts and work accounts to sign-in with no effort.
    A note is the v2 endpoint has some limitations: if you can live with these limitations (for example, your application only needs to sign-in users and eventually make queries against Graph API), then in general it should be fine to use, but if you need extra features like protecting your own Web API with scopes, then this feature is not released at this point (as November 2017). Please read this document 更新的限制列表 v2端点。
  3. 第三个(但不太推荐 AppSource 的选项)是继续使用 v1 端点并使您的应用程序成为 单租户 - 这是改变从 https://login.microsoftonline.com/commonhttps://login.microsoftonline.com/{yourtenantid},然后使用 B2B 邀请 API 邀请每个外部用户(包括工作和个人帐户)成为您的 Azure AD tenant/organization 的一部分。有关 B2B 的更多信息 也可在此处

上面的选项“3”对管理以及 AppSource 都有一些影响:通过使用此选项,您需要有一个 Azure Active Directory 租户(如果您还没有租户,您可以获取一个使用 these instructions),被邀请的用户将是该租户的 guests accounts - 这意味着您需要邀请每个外部用户加入您的应用程序/租户。 多租户 应用程序允许来自任何组织的任何用户登录到您的应用程序,而您这边的管理工作更少。一般来说,对于 SaaS 应用程序,建议使用 多租户 配置。

对于 AppSource,选项“3”也会导致缺乏沉浸感 的用户体验 (Partner led trial),其中最终用户将无法立即访问您的应用程序的演示 - 主要是因为他们必须等待邀请电子邮件并接受它(用户必须接受成为您租户的访客),以便他们可以访问您的应用程序。

有关 AppSource 要求和试用选项的更多信息 - 请参阅 this article