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

时间:2018-06-27 13:04:46

标签: azure authentication azure-active-directory multi-tenant azure-ad-graph-api

我目前正在升级应用程序,以实现多租户和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:

经过更多研究后,我发现它不起作用是因为我使用的公共端点不支持访客。 此处有更多详细信息: Can users from an unmanaged Azure AD directory, sign into an Azure AD multi-tenant application which resides in a different directory?

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

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(作用域,代码)失败,并显示以下错误:

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

如何使它与来自自定义域(abc.com)和现有Microsoft帐户的来宾用户一起使用?

1 个答案:

答案 0 :(得分:0)

原因:

您未获得abc.com租户的多租户应用的用户或管理员同意。也许该租户的设置不允许用户同意,只有管理员可以同意。

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

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

解决方案:

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

请告诉我这是否有帮助!