Authentication

使用 Active Directory 的 SSO 如何使使用者透明地登錄到 Intranet Web 應用程序?

  • October 20, 2015

有人告訴我,可以製作一個不需要登錄的 Web 應用程序。使用者登錄到 Windows,它通過 Active Directory (LDAP) 查找進行身份驗證。然後,他們應該能夠訪問我的 web 應用程序並且永遠不會看到登錄提示。這些客戶一直將此稱為單點登錄(可能是錯誤的,也是我困惑的一部分)。

但是,從我從 Tomcat 文件中讀到的 Single Sign On 是:

當您希望讓使用者能夠登錄與您的虛擬主機關聯的任何一個 Web 應用程序,然後讓同一虛擬主機上的所有其他 Web 應用程序辨識他們的身份時,可以使用單點登錄閥。

這對我來說非常清楚。使用者必須登錄一次,並且可以訪問 tomcat 實例上的每個 webapp。但是,我需要做的是以某種方式讓他們登錄,而無需向我的 tomcat 伺服器提供任何憑據。

所以,為了讓它工作,我想:

  • 使用者請求某個頁面
  • 伺服器看不到會話令牌,然後向客戶端請求一些憑據。
  • 客戶端瀏覽器無需使用者干預即可向伺服器提供一些憑據。
  • 然後,使用客戶端瀏覽器提供的那些憑據,它在 LDAP 中進行查找。

我已經看到一些使用客戶端證書的範例……特別是 DoD PKI 系統,這對我來說很有意義,因為在這些情況下,您將 Tomcat 配置為請求客戶端證書,但只是登錄到 Windows 我不明白這是怎麼回事會起作用,瀏覽器會將什麼資訊傳遞給伺服器等。這是 NTLM 的用途嗎?

首先——如果其他使用者碰巧訪問了這個頁面——只有特定的身份驗證方法可以讓你進行無提示的 SSO。它們是**NTLMKerberos**。另一方面,LDAP 永遠不會為您提供無提示的 SSO。

NTLM 實際上是 NTLMv1 和 NTLMv2。它們非常不同,由於嚴重的安全問題,NTLMv1 已被棄用。您應該避開無法正確辨識它們是否支持 NTLMv1 或 NTLMv2 的 Java 身份驗證解決方案,因為它們僅在其文件中使用“NTLM”一詞。上述安全解決方案的開發人員很可能並不了解自己,這更有理由尋找火災逃生通道。

與傳統觀念相反,NTLMv1 和 NTLMv2 都由 Microsoft 完整記錄,但您仍然會找到聲稱對協議進行“逆向工程”的解決方案。確實,在 Microsoft 記錄我認為 2006 年或 2007 年左右的協議之前,這是需要的。無論如何,NTLMv1 是一個禁忌。NTLMv2 本身沒有任何問題,但微軟一直在其所有產品中逐步淘汰 NTLM(以任何形式),轉而支持 Kerberos 身份驗證。NTLMv1 早已死去,而 NTLMv2 現在僅在沒有可用域控制器的情況下由 Microsoft 使用。底線:NTLM(以任何形式)並不是真正的前進方向。我們實際上應該向微軟致敬,因為它在這裡採用了基於標準的方法。

這給您留下了 Kerberos。Microsoft 創建了一個協議,用於通過 HTTP 協商和傳輸身份驗證資訊。這在 Microsoft 產品中稱為“集成 Windows 身份驗證”,但它已被確定為名為**SPNEGO**的官方標準。這是您應該尋找的。SPNEGO 支持 NTLMv2 和 Kerberos 作為底層身份驗證機制,但由於上述原因,您應該針對 Kerberos 而不是 NTLMv2。

我已經使用SourceForge 的 SPNEGO 項目成功地將幾個 Tomcat 應用程序(在 Linux/Solaris 上執行)與 Active Directory 集成。我發現這是最簡單的方法。這為您提供了類似於 Sharepoint 伺服器所做的無提示 SSO。這很可能是您的使用者在談論“SSO”時所期望的。正確配置 Kerberos、生成密鑰和在 Active Directory 中設置“虛擬”帳戶可能會很麻煩,但一旦你做對了,它就會像魅力一樣發揮作用。

我不喜歡SourceForge 的 SPNEGO 項目的唯一一點是我不了解它執行身份驗證的頻率。我令人討厭的懷疑是,它對每個頁面視圖都執行此操作,而不是為每個會話執行一次。也許我在這方面錯了。無論如何:這突出了 SSO 解決方案中要考慮的另一件事:您不想實施一種解決方案,該解決方案會向您的身份提供者(例如 Active Directory)發送不必要的請求。

引用自:https://serverfault.com/questions/293171