Keycloak CIBA 身份验证失败并显示“发送身份验证请求失败”

Posted

技术标签:

【中文标题】Keycloak CIBA 身份验证失败并显示“发送身份验证请求失败”【英文标题】:Keycloak CIBA Authentication fails with "Failed to send authentication request" 【发布时间】:2021-11-23 08:59:03 【问题描述】:

我正在尝试在 Keycloak 15.0.2 上设置 CIBA 端点。我已经设置了一个启用了 CIBA 端点的客户端,但是当我使用如下所示的请求点击它时:

curl -s -X POST \
-d "client_id=ciba_client_test" \
-d "client_secret=xxx" \
-d "login_hint=test_user_name" \
-d "scope=openid" \
"https://keycloak.address.com/auth/realms/poc_new/protocol/openid-connect/ext/ciba/auth"

我收到一个如下所示的错误:

"error":"server_error","error_description":"Failed to send authentication request"

我已检查客户端和领域的设置,但看不到任何会阻止身份验证请求的内容。

【问题讨论】:

【参考方案1】:

CIBA 依赖于“身份验证设备”的概念,例如智能手机,您在其上安装了某个第 3 方提供的应用程序。

当您发送请求时,我猜 Keycloak 无法联系该第 3 方来委派身份验证过程。 您是否按照文档中的说明定义了一个? https://www.keycloak.org/docs/latest/server_admin/#provider-setting

2021 年 11 月 24 日编辑: 我的本地测试设置有 Keycloak 15.0.2 在独立模式下运行。 'standalone.xml' 配置文件定义了一个 'ciba-http-auth-channel' 提供程序,它指向一个模拟身份验证设备的 SpringBoot 应用程序。 在尝试在容器中运行所有内容时,我确实遇到了 TLS 问题(SSLSocket 双工关闭失败,这没有任何意义)——转向标准(即无容器)方法解决了这些问题。

旁注:我发现处理用户/登录提示的方式有一个限制:用户必须在您的领域中定义,即使他们实际上是由外部方管理的。对于生产设置,需要某种用户联合。

【讨论】:

【参考方案2】:

CIBA 请求消息必须采用 URL 编码格式,但您的请求看起来没问题。试试这个标题。 Curity CIBA walkthrough 也可能提供一些有用的进一步信息。

-H: 'content-type: application/x-www-form-url-encoded'

【讨论】:

以上是关于Keycloak CIBA 身份验证失败并显示“发送身份验证请求失败”的主要内容,如果未能解决你的问题,请参考以下文章

带有外部身份提供者的 Keycloak 失败

使用反向代理后面的 keycloak 进行身份验证失败

Spring Security 和 Keycloak 因自定义身份验证提供程序而失败

Keycloak Script 基本身份验证器在失败时出现相同的错误消息

使用 Electron App 进行 Keycloak 身份验证

Keycloak Angular 2 - 检查身份验证状态 Keycloak 对象