具有自定义域的用户的 Azure AD B2B 身份验证错误 - AADSTS65005:当前不支持使用应用程序'My Application'



>我目前正在升级一个应用程序以启用多租户和 B2B 集成。

到目前为止,我有以下类型的用户在工作:

  • 内部 Azure AD 用户
  • 来自另一个租户的外部 Azure AD 用户
  • 个人Microsoft账户
  • 用户 Gmail 用户

我现在尝试通过以下过程使任何域中的用户能够访问我的应用程序:

  1. 向 x@abc.com 发送邀请 - 这有效
  2. 从收件箱兑换邀请 x@abc.com - 这有效,我成功设置了关联的Microsoft帐户
  3. 使用 x@abc.com 登录到我的应用程序 - 这不起作用,我收到以下错误:AADSTS65005:您的组织 abc.com 当前不支持使用应用程序"我的应用程序",因为它处于非托管状态。管理员需要通过 abc.com 的 DNS 验证来声明公司的所有权,然后才能预配应用程序"我的应用程序">

在这种情况下,abc.com 是外部合作伙伴。外部合作伙伴是动态的,并通过"域白名单"通过应用程序进行管理。所以我现在可以有 abc.com,以后可以 abcd.com,xyz.com 等。来自这些白名单域的用户通过应用程序 URL 自行注册。

有趣的是,gmail用户工作,所以我假设流行域有一个内部Azure AD白名单?

更新:

Gmail帐户正常工作的原因是因为它们确实是在我的Azure AD中创建为Microsoft帐户的。另一方面,abc.com 域帐户创建为"外部Azure Active Directory"帐户。(源属性(

更新#2:

经过更多的研究,我发现它不起作用,因为我使用的是不支持来宾的通用端点。 更多细节在这里: 非托管 Azure AD 目录中的用户是否可以登录到驻留在其他目录中的 Azure AD 多租户应用程序?

现在,我切换到使用特定于租户的终结点,如下所示:

Tenant specific endpoint: https://login.microsoftonline.com/{tenant-id}/v2.0

我可以从 abc.com 与来宾用户登录

但是Microsoft帐户现在停止工作。

AuthorizationCodeReceived = async (context) =>
{
...
var cca = new ConfidentialClientApplication(appId, redirectUri,
new ClientCredential(appSecret),
new SessionTokenCache(signedInUserID, context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase));
await cca.AcquireTokenByAuthorizationCodeAsync(scopes, code);
},

等待CCA。AcquireTokenByAuthorizationCodeAsync(scopes, code( 失败,并显示以下错误:

ErrorCode: invalid_grant
Message=AADSTS50020: MSA guest token redemption attempt on v2 common endpoint.

如何使其同时适用于自定义域 (abc.com( 和现有Microsoft帐户的来宾用户?

原因:

你未对abc.com租户的多租户应用进行用户或管理员同意。也许该租户的设置不允许用户同意,只有管理员可以这样做。

对于多租户应用,如果其他租户中的用户想要使用它,则可能需要用户或管理员同意应用程序。然后,将在该租户中自动创建服务主体。以便该租户中的用户可以使用该应用。

可以在此文档中查看有关多租户应用的用户或管理员同意的更多详细信息。

溶液:

尝试在请求中添加&prompt=admin_consent以强制管理员同意。您需要使用一个管理员帐户登录并进行管理员同意。如果你是该租户中的管理员,还可以在Enterprise Applications>User settings中启用user can do consent

如果这有帮助,请告诉我!

最新更新