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 【问题描述】:我有一个名为FOO
的Azure AD
,其中有很多用户。我在FOO
目录中创建了一个Azure ADB2C
作为资源,名为BAR
,我想在其中注册/登录用户。但是,如果您已经是 FOO
的用户,我希望您能够通过 Identity Provider
进行连接。
这可能吗?我没有设法完成这项工作。我目前正在关注这些文档:
1 这似乎适用于 FOO AD
对于 FOO ADB2C
。
2这似乎适合我的场景。
3 这似乎适用于FOO ADB2C
到BAR ADB2C
。
即使第二个文档适合我的场景,我也看到使用自定义策略是强制性的,我不喜欢这种策略。有什么解决方法吗?以前有人遇到过这种情况吗?
【问题讨论】:
我认为第一个场景就是您要寻找的。你遇到了什么问题? 如果我遵循第一种情况,我会在https://jwt.ms
:AADB2C99002: 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 函数应用时收到 403 错误
触发从“Keycloak”到“Azure ADB2C”的基本 http 调用以进行令牌响应时出错