Azure AD 作为 Azure ADB2C 的 OpenID Connect 提供程序

Posted

技术标签:

【中文标题】Azure AD 作为 Azure ADB2C 的 OpenID Connect 提供程序【英文标题】:Azure AD as an OpenID Connect Provider for an Azure ADB2C 【发布时间】:2021-11-09 10:03:15 【问题描述】:

我有一个名为FOOAzure AD,其中有很多用户。我在FOO 目录中创建了一个Azure ADB2C 作为资源,名为BAR,我想在其中注册/登录用户。但是,如果您已经是 FOO 的用户,我希望您能够通过 Identity Provider 进行连接。

这可能吗?我没有设法完成这项工作。我目前正在关注这些文档:

1 这似乎适用于 FOO AD 对于 FOO ADB2C

2这似乎适合我的场景。

3 这似乎适用于FOO ADB2CBAR ADB2C

即使第二个文档适合我的场景,我也看到使用自定义策略是强制性的,我不喜欢这种策略。有什么解决方法吗?以前有人遇到过这种情况吗?

【问题讨论】:

我认为第一个场景就是您要寻找的。你遇到了什么问题? 如果我遵循第一种情况,我会在https://jwt.msAADB2C99002: User does not exist. Please sign up before you can sign in. 中收到错误。 那么您有一个注册/登录策略并且您已将您的 Azure AD 添加为身份提供者?这发生在您单击按钮以使用 AAD 登录后? 我有一个Sign In 用户流。 啊,这可能是原因.. B2C 期望用户已经存在于登录流程中。如果缺少用户对象,登录/注册流程将自动在 B2C 租户中创建用户对象。听起来这种情况可能无法使用标准登录流程。 【参考方案1】:

您还可以添加自定义 OIDC 身份提供者

    在您的 FOO 目录中注册代表 AAD B2C 的新应用程序,并生成客户端密码(不要忘记将其保存在某处) - 此和应用程序 ID 需要在下一步中添加 在 BAR 租户中添加新的身份提供者作为 OIDC(LHS 上的身份提供者) 在元数据字段中粘贴https://login.microsoftonline.com/FOO.onmicrosoft.com/v2.0/.well-known/openid-configuration 为域提示设置 FOO,为用户 ID 设置 oid,为显示名称设置名称,为给定名称设置 given_name,为姓氏设置family_name,为电子邮件设置唯一名称(在我的情况下) 之后,您应该能够选择您的 FOO 租户作为用户流中的附加按钮,就像 Google、Facebook 或您那里的任何东西一样

另一种选择是使用自定义策略。

【讨论】:

这就是我最终要做的。 请记住,它就像社交媒体帐户。如果用户在 BAR 租户中退出,他/她将不会在 FOO 租户中退出,但这是一个将在不同线程中继续的故事,需要一些技巧:) 这就是我目前所面临的。我看到我需要将用户发送到 IDP 的 end_session_endpoint 并使用 post_logout_redirect_uri 让他回到我的页面。 您对此有何见解?我目前被困在 IDP 页面上,因为由于某种原因它没有重定向到我的 post_logout_redirect_uri 如何调用端点?是login.microsoftonline.com/tenantguid/oauth/v2.0/logout?post_logout_redirect_uri=your_app.com?【参考方案2】:

由于您使用的是登录流程,Azure AD B2C 期望用户对象存在于 B2C 目录中。

您必须:

    使用登录/注册流程,如果 B2C 尚不存在用户,则该流程会创建用户 使用允许本地用户登录的自定义策略 + 为您的 AAD 用户创建用户对象(如果它们尚不存在)

【讨论】:

以上是关于Azure AD 作为 Azure ADB2C 的 OpenID Connect 提供程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure AD B2C 作为服务进行身份验证

访问被 Azure AD B2C 锁定的 Azure 函数应用时收到 403 错误

触发从“Keycloak”到“Azure ADB2C”的基本 http 调用以进行令牌响应时出错

如何在 Azure AD B2C 中实现基于成员的访问?

KeyCloak 与 Azure ADB2C 集成 - 缺少状态参数

Azure AD 的 LogoutResponse 证书问题