Azure AD B2C 与企业 (Azure?) AD 帐户集成

Posted

技术标签:

【中文标题】Azure AD B2C 与企业 (Azure?) AD 帐户集成【英文标题】:Azure AD B2C integrating with corporate (Azure?) AD accounts 【发布时间】:2018-01-12 12:29:51 【问题描述】:

我们希望将 Azure AD B2C 用于我们的 Web 应用程序,以允许用户使用“本地”帐户/密码或使用他们的社交帐户(Facebook 等)登录。 https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview

但是,在此应用程序中,我们可能以组织为目标,因此我们还希望与公司现有的 Azure AD 公司帐户集成。这样用户就不必创建新帐户,并且可以使用他们现有的公司帐户。

事实证明,Azure AD B2C 中有一个(新)功能,允许您使用此处所述的自定义策略显式链接到外部 Azure AD 帐户:https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-setup-aad-custom

不幸的是,这只有在我们事先知道我们需要链接哪些外部公司并添加特定配置时才有效。它还会泄露有关谁在使用该应用程序的信息,因为公司名称在登录页面上被列为选项。

我还查看了 Azure AD B2B 功能,但我认为这也不合适。

我们真正希望 Azure AD B2C 提供对(公司)Microsoft 帐户的通用登录,该帐户可检测该电子邮件地址是否已在任何 Azure AD 系统中处理;如果是,它会将身份验证委托给该系统,但如果不是,它将回退到 Azure AD B2C 本地帐户。

这种通用登录已经适用于访问标准 Microsoft 应用程序,例如其门户。有谁知道这在 Azure AD B2C 中是否可行,或者有任何可能的时间表来确定何时成为可能? 是否有任何替代系统可以提供类似的功能?

【问题讨论】:

【参考方案1】:

您指的是在 multi-tenant mode 中添加 Azure AD,作为 Azure AD B2C 的身份提供程序。

发件人:Multi-Tenant Azure AD Auth in Azure AD B2C with Custom Policies

为了支持多租户 Azure AD,您需要在自定义策略中为您的 ClaimsProvider 配置不同的值。

使用以下值,确保替换为 client_id 和 IdTokenAudience。

<Item Key="DiscoverMetadataByTokenIssuer">true</Item>
<Item Key="ValidTokenIssuerPrefixes">https://sts.windows.net/</Item>
<Item Key="authorization_endpoint">https://login.microsoftonline.com/common/oauth2/authorize</Item>
<Item Key="client_id">df5b2515-a8d2-4d91-ab4f-eac6e1e416c2</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>
<Item Key="scope">openid</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="response_types">id_token</Item>
<Item Key="IdTokenAudience">df5b2515-a8d2-4d91-ab4f-eac6e1e416c2</Item>

注意:此功能尚未正式预览,因此请谨慎使用。继续关注"Sign in by using Azure AD accounts" 官方文档,以了解其何时得到完整记录和支持。

编辑:确保您在应用程序的设置中翻转Multi-tenanted 开关,否则您将收到以下错误:

AADSTS70001:在目录(我们公司的主域)中找不到标识符为“(guid)”的应用程序

【讨论】:

不幸的是,这似乎不起作用。我收到“抱歉,我们无法让您登录。我们收到了错误的请求。”我使用了与特定租户相同的 client_id 和 idTokenAudience。还有什么我应该配置的吗? 进一步挖掘,这指定了一个错误:“AADSTS70001:在目录(我们公司的主域)中找不到标识符为 '(guid)' 的应用程序”。在此测试期间,我们根本没有引用主域。我正在使用 Azure B2C 的测试租户和我正在登录的用户的另一个测试租户来尝试所有这些。这如何/为什么与我们的主域连接?我们可以在这里强制断开连接吗?其实这里应该用什么client_id,因为很明显我们不能把我们的app作为client添加到每个目标租户的AD中。 听起来您没有在此声明提供程序中使用的 Azure AD 应用中打开“多租户”开关。 是的,解决了它。非常感谢。这现在似乎有效。【参考方案2】:

Azure AD B2C 不正式支持多租户 Azure AD 身份提供程序。您应该为该功能投票here,以便它可以帮助确定它的优先级,以便在该功能处于预览状态时与您联系。

如果您使用的 Azure AD 租户数量有限,则有一种潜在的解决方法。您可以在您的应用程序中构建一个页面,用户在其中输入电子邮件地址。根据邮箱地址,调用 Azure AD B2C 时可以使用 domain_hint 参数,将其直接重定向到正确的登录页面。

【讨论】:

那么,如果您想让您的 Web 应用程序适用于公司内部用户(普通 AD),但还需要对公司外部的其他用户(其他 Azure AD 租户和 Microsoft 帐户,以及Facebook 帐户等)? 你是什么意思,它是一个外部用户也可以使用的内部应用程序?如果要构建员工和客户都可以登录的 CUSTOMER 应用程序,则应使用 Azure AD B2C 租户并将 Azure AD 添加为 IdP。但是,如果这是员工和公司合作伙伴用来协作工作的应用程序,那么您应该使用 Azure AD 并查看 Azure AD B2B 好的,谢谢。但是,如果我想让客户可以使用他们的 Azure AD 登录,并且我有无限的客户/组织,我不能手动将它们中的每一个手动添加为提供者。 Azure AD 中所需的功能 - 多租户应用程序... 我同意帕拉赫的观点。您应该将客户和内部应用程序/用户分开。遵循 Microsoft 设定的领先优势。他们可能出于某种原因决定将 AAD 和 B2C 作为单独的服务提供;)如果您绝对必须;您可以默认为客户登录,并自定义登录页面以包含内部人员访问 AAD 登录页面而不是 B2C 的链接。更好的是,有一个专门用于内部 AAD 的单独页面,该页面重定向到 AAD 登录。 IE。 /login -> B2C 登录 & /internal -> AAD 登录

以上是关于Azure AD B2C 与企业 (Azure?) AD 帐户集成的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C:注销社交帐户(使用 OIDC 的 Azure AD)

Azure AD B2C OpenIdConnect ConfigurationManager 错误

Azure AD B2C - 角色管理

Azure AD B2C 租户和普通 Azure AD 租户有啥区别?

Azure AD B2C 将用户流与应用一对一关联

如何使用 Azure AD B2C 保护 Blazor Wasm 应用访问的 Azure 函数?