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

10
我们希望使用Azure AD B2C来为我们的Web应用程序提供身份验证功能,让用户可以使用“本地”帐户/密码或使用其社交媒体帐户(Facebook等)进行登录。https://learn.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview 然而,在此应用程序中,我们可能会针对组织进行目标定位,因此我们还希望与公司现有的Azure AD企业帐户集成。这样,用户就无需创建新帐户,可以使用其现有的企业帐户。
事实证明,Azure AD B2C中有一项(新的)功能,允许您使用自定义策略明确链接到外部Azure AD帐户,如此描述:https://learn.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中是否可能实现此功能,或者有任何可能实现此功能的时间表吗?是否有任何其他可能能够提供类似功能的系统?
2个回答

5
您所提到的是将Azure AD设置为多租户模式,并将其添加为Azure AD B2C的身份提供程序。
来自:使用自定义策略在Azure AD B2C中进行多租户Azure AD身份验证 为了支持多租户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>

注意:这个功能目前甚至还没有正式的预览版本,因此请谨慎使用。请继续监视官方"通过 Azure AD 帐户登录"文档,以查看何时完全记录和支持此功能。

编辑:确保在应用程序设置中切换多租户开关,否则您将收到以下错误:

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


不幸的是,这似乎不起作用。我收到了“抱歉,但我们在登录您时遇到问题。我们收到了一个错误的请求。” 我已经使用了与特定租户相同的client_id和idTokenAudience。我还需要配置其他内容吗? - Conor O'Neill
深入挖掘后,发现出现了一个错误:“AADSTS70001: 应用程序标识符 '(guid)' 在目录中未找到(我们公司的主要域)”。在进行此测试时,我们根本没有引用主要域。我正在使用 Azure B2C 的测试租户以及另一个用于登录的用户的测试租户来尝试所有这些操作。这与我们的主要域有什么关联?我们能否在此处强制断开连接?实际上,在这里应该使用什么 client_id,因为显然我们无法将我们的应用程序添加到每个目标租户的 AD 中作为客户端。 - Conor O'Neill
2
听起来你在这个声明提供程序中没有打开Azure AD应用程序中的“多租户”开关。 - Saca
1
是的,问题已经解决了。非常感谢你。现在看起来可以正常工作了。 - Conor O'Neill

1
Azure AD B2C并不官方支持多租户Azure AD身份提供者。您应该在此处链接投票以帮助优先考虑,以便在功能预览中联系您。
如果您只与有限的Azure AD租户一起使用,则有一个潜在的解决方法。您可以在应用程序中构建一个页面,用户在其中输入电子邮件地址。根据电子邮件地址,您可以在调用Azure AD B2C时使用domain_hint参数,将其直接重定向到正确的登录页面。

那么,如果你想要一个内部公司用户使用的 Web 应用程序(普通 AD),但也需要认证公司外的其他用户(其他 Azure AD 租户、Microsoft 帐户和 Facebook 帐户等),该怎么办呢? - Hrvoje Kusulja
什么意思,它是一个内部应用,外部用户也可以使用?如果你想建立一个顾客应用,让你的员工和客户都可以登录,你应该使用Azure AD B2C租户并添加Azure AD作为IdP。然而,如果这是一个员工和公司合作伙伴用于协同工作的应用程序,则应使用Azure AD,并了解Azure AD B2B。 - Parakh
好的,谢谢。但是如果我想让客户可以使用他们的Azure AD登录,并且我有无限的客户/组织,我无法手动添加每个作为提供程序。我需要像Azure AD中的多租户应用程序一样的功能... - Hrvoje Kusulja
我同意Parakh的观点。你应该将客户和内部应用/用户分开。跟随微软的先例。他们可能决定将AAD和B2C作为单独的服务提供有其原因;)如果你非常需要,你可以默认使用客户登录,并自定义登录页面以包括一个链接,让内部人员访问AAD登录页面而不是B2C。更好的做法是,有一个专门的页面用于内部AAD,重定向到AAD登录。 即/login -> B2C登录 & /internal -> AAD登录 - grumpyTofu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接