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

Posted

技术标签:

【中文标题】KeyCloak 与 Azure ADB2C 集成 - 缺少状态参数【英文标题】:KeyCloak Integration with Azure ADB2C - Missing State Parameter 【发布时间】:2022-01-12 07:57:57 【问题描述】:

我已将“KeyCloak”(身份代理)与 Azure ADB2C 集成以对用户进行身份验证。

首先,用户ADB2C登录用户流端点与Keycloak集成并测试,绝对没问题。此外,我们将 B2C“忘记密码”用户流端点与 Keycloak 集成,在 B2C 中成功忘记密码完成后,将响应重定向回 keycloak,我们看到来自 Keycloak 屏幕的错误响应为 - “响应中缺少状态参数身份提供者”

在请求的url中有Scope、Client_id、State、Response_type、Redirect_URI、nonce。但在 B2C 响应 url 中包含“Client_ID”、response_type、scope 和 redirect_Uri。

到目前为止,无法找到解决此问题的方法。请建议,如果有任何方法可以从 ADB2C 或 Key-Cloak 处理此问题。

“ADB2C - 使用 OAuth 标准身份验证协议实现”

Keycloak 错误页面代码:- “身份提供者响应中缺少状态参数”

谢谢。

【问题讨论】:

在 AAD B2C 忘记密码端点的请求 URL 中,Keycloak 是否传递了 state 参数? 是的,从 keycloak 到 B2C 的请求 url 中有一个状态参数。 嗨,贾斯·苏瑞。只是想检查是否有任何替代方法可以从 ADB2C 或 Keycloak 处理这种情况。谢谢! 如果您发送一个状态参数,B2C 应该始终将其传递回去。仔细检查网络跟踪以了解发生了什么。 【参考方案1】:

• 客户端使用“state”参数来维护请求和回调之间的状态。授权服务器在将用户代理重定向回客户端时包含此值。该参数应该用于防止跨站请求伪造攻击。在您的情况下,keycloak 身份代理服务是授权服务,而 Azure AD B2C 是客户端。

• 由于来自 Azure AD B2C 的响应 URL 中缺少 state 参数,因此可能会出现 keycloak 身份代理的重定向 URI 或应用程序可能未在 Azure AD B2C 中正确配置的情况,因为 keycloak抛出状态参数丢失错误。

• 由于缺少 state 参数,Keycloak 可能将此响应视为 CSRF 攻击并因此显示错误,而在 Azure AD B2C 中,与特定 keycloak 页面相关的重定向 URI 可能未正确配置,因此尽管响应已到达 keycloak 默认 URI,但未到达预期的应用程序集成 URI,因此可能缺少 state 参数。

请参阅以下有关 CSRF 和状态参数配置以及 Azure AD B2C 中的重定向 URI 的文档链接:-

https://datatracker.ietf.org/doc/html/rfc6749#section-10.12

https://docs.microsoft.com/en-us/azure/active-directory/develop/reply-url

【讨论】:

您好@CloudSpace03,如果我的回答对您有帮助,您可以投票并接受它作为答案(点击答案旁边的复选标记将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。

以上是关于KeyCloak 与 Azure ADB2C 集成 - 缺少状态参数的主要内容,如果未能解决你的问题,请参考以下文章

KeyCloak 与 Azure B2C 用户名映射问题的集成

使用 Keycloak 和 Azure Active Directory 的 SSO

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

使用 Azure AD 作为身份提供者的 Azure ADB2C 单点注销

我可以在 ADB2C 中创建多少用户?

Keycloak 与 IDP 和 SSO 的集成