這種 Kerberos/AD 設置是否可行?
我們有一個稍微複雜的 IDAM 設置:
即最終使用者的機器和瀏覽器與父 AD 位於一個網路中,而我們基於 Jetty 的應用程序和它可以與之對話的 AD(本地 AD)位於另一個網路中。
兩個 AD 之間存在雙向信任。父網路中的瀏覽器在受信任站點中具有本地域。
Jetty 伺服器的設置如下:
- 它使用針對本地 AD 中的主體生成的 keytab 文件
- 它在本地 AD 中定義的使用者下作為 Windows 服務執行
- 域、域-域映射和 kdc 是針對本地 AD 的域定義的
- 它使用 spnego - isInitiator 設置為 false;doNotPrompt 為真;storeKey 為真
問題是:
作為測試,從本地網路內的瀏覽器訪問伺服器(即連結到本地 AD)有效- Kerberos 調試資訊出現在日誌中,我可以在 HTTP 流量中看到正確的 Kerberos 協商,並且使用者自動登錄. 傑出的。
但是,從父網路中的瀏覽器訪問伺服器(這是我們的使用者將如何做的事情)不起作用!瀏覽器返回 401 unauth,但隨後提示輸入憑據,輸入時會出現空白螢幕。然後點擊地址欄並按 Enter 會執行以下兩項操作之一,具體取決於憑據是用於遠端 AD 還是本地 AD:
- 本地 AD 憑據然後登錄正常,在日誌中從頭開始使用 Kerberos(GET 請求、401 unauth 響應、Kerberos 標頭請求等)
- 遠端 AD 憑據未登錄(GET 請求,401 unauth 響應,看起來像 NTLM 標頭
Authorization: Negotiate <60 or so random chars>
:)無論哪種方式,它提示的事實都是錯誤的!
這些症狀有解釋嗎?我們的設置可以做我們想要的嗎?
至於上面的描述可能是錯誤的:我提到的關於 Jetty 伺服器的任何配置都應該是準確的,就像我所做的那樣。我很樂意提供更多細節。任何關於 AD 或父網路瀏覽器的配置都可能是可疑的,因為它不在我的控制之下,而且我已經向我報告了配置,而不是親眼看到它。
如果沒有看到數據包擷取,我猜HTTP/www.website.com SPN 需要註冊到執行應用程序的帳戶。Microsoft 的目錄服務團隊在以下 URL 上發表了一篇很棒的多部分文章來解決這個主題。
從每個環境中的客戶端執行數據包擷取(netmon、wireshark)以辨識正在查找的 SPN。確定後,使用setspn cmd 將其註冊到執行應用程序的帳戶。
FWIW,Kerberos 僅在 LAN 上工作。如果有人需要在無法訪問域控制器的情況下進行訪問,那麼您將需要考慮 SSO,例如 Shibboleth 或 ADFS。
編輯:正如@alex-h所提到的,瀏覽器需要配置為通過 Kerberos 進行靜默身份驗證。
- Internet Explorer - 雖然 TechNet 文章並非專門針對您的應用程序,但步驟是相同的。
- Firefox - 與 IE 連結相同,不完全匹配但步驟相同。
最後,這是 Microsoft Sharepoint 部署的常見問題。他們希望通過 Kerberos 的 SSO 在使用者通過域身份驗證後靜默發生。因此,如果上述答案不能解決您的問題,請嘗試檢查他們的論壇,例如: