集成 Windows 驗證(Integrated Windows authentication)往往用于局域網環境中,因為需要使用服務器執行驗證,被驗證的用戶也必須處于同一域內。為了能夠自動驗證用戶,用戶所用的客戶端機器也必須處于同一域內。
可以利用以下幾種方案來實現 Tomcat 下的集成 Windows 驗證:
下面將分別詳細講述這些方案。
需要仔細配置 Kerberos 身份驗證服務(集成 Windows 驗證的基礎)。如果嚴格按照下列步驟去做,配置就會生效。這些配置的靈活度很小,所以必須嚴格按照下列方式去做。從測試到現在,已知的規則是:
在配置 Windows 驗證的 Tomcat 內建支持時,共涉及到4個組件:域控制器、托管 Tomcat 的服務器、需要使用 Windows 驗證的 Web 應用,以及客戶端機器。下面將講解每個組件所需的配置。
下面配置范例中用到的 3 個機器名稱為:win-dc01.dev.local (域控制器)、win-tc01.dev.local(Tomcat 實例)、win-pc01.dev.local (客戶端)。它們都是DEV.LOCAL 域成員。
注意:為了在下面的步驟中使用密碼,不得不放寬了域密碼規則,對于生產環境,可不建議這么做。
下列步驟假設前提是:經過配置,服務器可以做為域控制器來使用。關于如何配置 Windows 服務器配置成域控制器,不在本章討論范圍之內。
配置域控制器,使 Tomcat 支持 Windows 驗證的步驟為:
以上步驟測試環境為:運行 Windows Server 2008 R2 64 位標準版的域控制器。對于域功能級別和林(forest)功能級別,使用 Windows Server 2003 的功能級別。
下列步驟假定前提為:已經安裝并配置好了 Tomcat 和 Java 6 JDK/JRE,并以 tc01@DEV.LOCAL 用戶來運行 Tomcat。配置用于 Windows 驗證的 Tomcat 實例的步驟如下:
創建 kerberos 配置文件 $CATALINA_BASE/conf/krb5.ini。本文檔使用的文件包含以下內容
[libdefaults]
default_realm = DEV.LOCAL
default_keytab_name = FILE:c:\apache-tomcat-8.0.x\conf\tomcat.keytab
default_tkt_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts- hmac-sha1-96
default_tgs_enctypes = rc4-hmac,aes256-cts-hmac-sha1-96,aes128-cts- hmac-sha1-96
forwardable=true
[realms]
DEV.LOCAL = {
kdc = win-dc01.dev.local:88
}
[domain_realm]
dev.local= DEV.LOCAL
.dev.local= DEV.LOCAL
該文件的位置可以通過 `java.security.krb5.conf` 系統屬性來修改。
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
useKeyTab=true
keyTab="c:/apache-tomcat-8.0.x/conf/tomcat.keytab"
storeKey=true;
};
com.sun.security.jgss.krb5.accept {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
principal="HTTP/win-tc01.dev.local@DEV.LOCAL"
useKeyTab=true
keyTab="c:/apache-tomcat-8.0.x/conf/tomcat.keytab"
storeKey=true;
};
本文件位置可以通過 java.security.auth.login.config 系統屬性來修改。所用的 LoginModule 是 JVM 所專有的,從而能保證所指定的 LoginModule 匹配所用的 JVM。登錄配置名稱必須與驗證 valve 所用值相匹配。
SPNEGO 驗證器適用于任何 Realm,但如果和 JNDI Realm 一起使用的話,JNDI Realm 默認將使用用戶的委托憑證(delegated credentials)連接 Active 目錄。
上述步驟測試環境為:Tomcat 服務器運行于 Windows Server 2008 R2 64 位標準版上,帶有 Oracle 1.6.0_24 64 位 JDK。
測試環境如下:
雖然建議使用最新的穩定版本,但其實所有 Tomcat 8 的版本都能使用。
配置與 Windows 基本相同,但存在以下一些差別:
配置 Web 應用,以便使用 web.xml 中的 Tomcat 專有驗證方法 SPNEGO(而不是 BASIC 等)。和其他的驗證器一樣,通過顯式地配置驗證 valve并且在 Valve 中設置屬性來自定義行為。
配置客戶端,以便使用 Kerberos 認證。對于 IE 瀏覽器來說,這就需要 Tomcat 實例位于“本地局域網”安全域中,并且需要在“工具 > Internet 選項 > 高級”中啟用集成 Windows 認證。注意:客戶端和 Tomcat 實例不能使用同一臺機器,因為 IE 會使用未經證實的 NTLM 協議。
正確配置 Kerberos 驗證是有一定技巧性的。下列參考資料有一定幫助。一般來說,Tomcat 用戶郵件列表中的建議也是可取的。
關于該解決方案的完整詳情,可瀏覽 Waffle 網站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 Kerberos 擴展網站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 該項目網站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 該項目網站。其關鍵特性為:
通過配置 IIS 提供 Windows 驗證的步驟如下:
Apache httpd 默認并不支持 Windows 驗證,但可以使用很多第三方模塊來實現:
采用以下步驟配置 httpd,以便提供 Windows 驗證: