
我正在嘗試使用瀏覽器(Chrome 或 firefox)和使用用戶聯合 AD 網域配置的 keycloak(配置了 Kerberos)讓 SSO 工作。
首先,我概述了我所擁有的內容,然後添加了更多詳細資訊。
概述:
呼叫授權端點“.../auth/realms/test_realm/protocol/openid-connect/auth”並使用 tcpdump 我可以看到:
瀏覽器向授權端點發送帶有必要參數的 get 請求
Keycloak 正確回應:
- 帶有 401 Unauthorized
- 帶有標題“WWW-Authenticate: Negotiate”瀏覽器發送我認為正確的新獲取請求:
-with“授權:協商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGFKAAAADw==”
這是發送 spnego 令牌Keycloak 回應“200 OK”,但登入頁面沒有令牌或回調 url 我在 Keycloak 日誌中沒有錯誤
Q:keycloak 在這裡應該回應什麼?應該發送到回調 url 並帶有一些 cookie,例如KEYCLOAK_IDENTIT和KEYCLOAK_SESSION, 正確的?使用此 cookie,我可以呼叫令牌端點來取得要在應用程式中使用的令牌。
Q:知道缺少什麼嗎?我知道有很多部分,但也許缺少一些明顯的東西。
進行手動登入時,我會呼叫登入操作/驗證端點,該端點會傳回 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
-使用“領域加入”將linux機器添加到測試域
-添加了LDAP AD的設置用戶聯合,可以手動驗證ldap測試用戶
-激活與主體和的Kerberos集成從AD計算機創建的密鑰表
- 將域信息添加到 /etc/krb5.conf 文件中,
如果需要,我可以顯示更多詳細信息,但我必須對信息進行匿名化。