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

问题描述 投票:0回答:3

我正在尝试在 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"}

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

authentication oauth-2.0 keycloak openid-connect keycloak-connect
3个回答
2
投票

CIBA 依赖于“身份验证设备”的概念,例如一部装有第三方提供的应用程序的智能手机。

当您发送请求时,我的猜测是 Keycloak 无法联系该第三方来委托身份验证过程。 您是否按照文档中的指定定义了一个? 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 双工关闭失败,这没有任何意义)——转向标准(即无容器)方法解决了这些问题。

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


0
投票

CIBA 请求消息必须采用表单 URL 编码,但除此之外,您的请求看起来没问题。尝试一下这个标题。此外,Curity CIBA 演练可能会提供一些有用的进一步信息。

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

0
投票

根据我的经验,CIBA 的问题在于如何构建 Keycloak 本身。正如您在之前的回答中所说,问题可能出在容器上。就我而言,身份验证的第 3 方是我的 Windows 主机 上的一项服务,监听 8082 端口。最初我使用 docker 运行 Keycloak 并遇到了与您相同的问题:

docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:24.0.4 start-dev --spi-ciba-auth-channel-ciba-http-auth-channel-http-authentication-channel-uri=http://localhost:8082/

正常情况下,问题是您的容器无法访问主机的IP堆栈。从容器的角度来看,

localhost
就是容器本身。感谢 这个建议,我将
localhost
更改为
host.docker.internal
,并且我与 CIBA 的演示成功了。在同一链接中,您甚至可以找到针对 Mac 和 Linux 主机的建议。

当然,您还必须设置您的 Keycloak 客户端以获得 CIBA 资助

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.