我正在尝试使用浏览器(Chrome 或 Firefox)和配置了用户联合 AD 域(已配置 kerberos)的 keycloak 来使 SSO 工作。
首先,我介绍一下我所拥有的内容,然后添加更多细节。
概述:
调用授权端点“.../auth/realms/test_realm/protocol/openid-connect/auth”并使用 tcpdump 我可以看到:
浏览器向授权端点发送带有必要参数的获取请求
Keycloak 正确响应:
-带有 401 Unauthorized
-带有标头“WWW-Authenticate: Negotiate”我认为浏览器发送了一个新的 get 请求:
-带有“授权:协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGFKAAAADw==”
这是发送 spnego 令牌Keycloak 响应“200 OK”,但登录页面没有令牌或回调网址,我在 Keycloak 日志中没有错误
问:keycloak 应该在这里做出什么反应?应该将一些 cookie 发送到回调 URL,例如KEYCLOAK_IDENTIT和KEYCLOAK_会话,对吧?有了这个 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 文件
如果需要,我可以显示更多详细信息,但我必须匿名化这些信息。