使用与 Windows AD 集成的 Kerberos 的用户联合,浏览器和 Keycloak 之间的 SSO 不起作用

使用与 Windows AD 集成的 Kerberos 的用户联合,浏览器和 Keycloak 之间的 SSO 不起作用

我正在尝试使用浏览器(Chrome 或 Firefox)和配置了用户联合 AD 域(已配置 kerberos)的 keycloak 来使 SSO 工作。

首先,我介绍一下我所拥有的内容,然后添加更多细节。

概述:
调用授权端点“.../auth/realms/test_realm/protocol/openid-connect/auth”并使用 tcpdump 我可以看到:

  1. 浏览器向授权端点发送带有必要参数的获取请求

  2. Keycloak 正确响应:
    -带有 401 Unauthorized
    -带有标头“WWW-Authenticate: Negotiate”

  3. 我认为浏览器发送了一个新的 get 请求:
    -带有“授权:协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGFKAAAADw==”
    这是发送 spnego 令牌

  4. Keycloak 响应“200 OK”,但登录页面没有令牌或回调网址,我在 Keycloak 日志中没有错误

问:keycloak 应该在这里做出什么反应?应该将一些 cookie 发送到回调 URL,例如KEYCLOAK_IDENTITKEYCLOAK_会话,对吧?有了这个 cookie,我可以调用令牌端点来获取应用程序中使用的令牌。

问:知道缺少什么吗?我知道有很多部分,但也许缺少了一些明显的东西。

手动登录时,我会调用 login-actions/authenticate 端点,该端点会返回 cookie KEYCLOAK_IDENTIT 和 KEYCLOAK_SESSION,然后我可以使用它们来调用令牌端点并获取令牌。
我使用的用户与从测试域登录的用户相同,因此我知道 keycloak 可以对测试用户进行身份验证。


现在有更多详细信息

为了配置 Keycloak,我遵循了https://www.keycloak.org/docs/latest/server_admin/

在 Windows 客户端计算机(浏览器 chrome 或 firefox,均已测试)中:
-我已将 URL 添加到白名单
-我正在使用所需参数调用授权端点

在 Windows Server 2019 AD 域中
-我已使用以下命令创建了一个密钥表文件:
ktpass /out testdomainlocal_keytab_file.keytab /princ HTTP/[电子邮件保护]/mapuser keycloak_kerberos /pass "somepass" /crypto All /ptype KRB5_NT_PRINCIPAL /kvno 1
- 用户 keycloak_kerberos 存在于我的测试域中

在 linux rhel8.8 中我有 keycloak 22.01
-使用“realm join”将 linux 机器添加到测试域
-添加了 LDAP AD 的设置用户联合,可以手动验证 ldap 测试用户
-激活与主体的 Kerberos 集成以及从 AD 机器创建的 keytab
-将域信息添加到 /etc/krb5.conf 文件

如果需要,我可以显示更多详细信息,但我必须匿名化这些信息。

相关内容