集成 Windows 驗證(Integrated Windows authentication)往往用于局域網(wǎng)環(huán)境中,因為需要使用服務器執(zhí)行驗證,被驗證的用戶也必須處于同一域內。為了能夠自動驗證用戶,用戶所用的客戶端機器也必須處于同一域內。
可以利用以下幾種方案來實現(xiàn) Tomcat 下的集成 Windows 驗證:
下面將分別詳細講述這些方案。
需要仔細配置 Kerberos 身份驗證服務(集成 Windows 驗證的基礎)。如果嚴格按照下列步驟去做,配置就會生效。這些配置的靈活度很小,所以必須嚴格按照下列方式去做。從測試到現(xiàn)在,已知的規(guī)則是:
DEV.LOCAL
)不區(qū)分大小寫,在jaas.conf 中也是這樣。在配置 Windows 驗證的 Tomcat 內建支持時,共涉及到4個組件:域控制器、托管 Tomcat 的服務器、需要使用 Windows 驗證的 Web 應用,以及客戶端機器。下面將講解每個組件所需的配置。
下面配置范例中用到的 3 個機器名稱為:win-dc01.dev.local
(域控制器)、win-tc01.dev.local
(Tomcat 實例)、win-pc01.dev.local
(客戶端)。它們都是DEV.LOCAL
域成員。
注意:為了在下面的步驟中使用密碼,不得不放寬了域密碼規(guī)則,對于生產(chǎn)環(huán)境,可不建議這么做。
下列步驟假設前提是:經(jīng)過配置,服務器可以做為域控制器來使用。關于如何配置 Windows 服務器配置成域控制器,不在本章討論范圍之內。
配置域控制器,使 Tomcat 支持 Windows 驗證的步驟為:
tc01
,密碼為 tc01pass
。將 SPN 映射到用戶賬戶上。SPN 的形式為:<service class>/<host>:<port>/<service name>
。本文檔所用的 SPN 為 HTTP/win-tc01.dev.local
。要想將用戶映射到 SPN 上,運行以下命令:
setspn -A HTTP/win-tc01.dev.local tc01
生成 keytab 文件,Tomcat 服務器會用該文件將自身注冊到域控制器上。該文件包含用于服務提供者賬戶的 Tomcat 私鑰,所以也應該受到保護。運行以下命令生成該文件(全部命令都應寫在同一行中):
ktpass /out c:\tomcat.keytab /mapuser tc01@DEV.LOCAL /princ HTTP/win-tc01.dev.local@DEV.LOCAL /pass tc01pass /kvno 0
test
,密碼為 testpass
。以上步驟測試環(huán)境為:運行 Windows Server 2008 R2 64 位標準版的域控制器。對于域功能級別和林(forest)功能級別,使用 Windows Server 2003 的功能級別。
下列步驟假定前提為:已經(jīng)安裝并配置好了 Tomcat 和 Java 6 JDK/JRE,并以 tc01@DEV.LOCAL
用戶來運行 Tomcat。配置用于 Windows 驗證的 Tomcat 實例的步驟如下:
tomcat.keytab
文件復制到 $CATALINA_BASE/conf/tomcat.keytab
。$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` 系統(tǒng)屬性來修改。
$CATALINA_BASE/conf/jaas.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
系統(tǒng)屬性來修改。所用的 LoginModule 是 JVM 所專有的,從而能保證所指定的 LoginModule 匹配所用的 JVM。登錄配置名稱必須與驗證 valve 所用值相匹配。
SPNEGO 驗證器適用于任何 Realm,但如果和 JNDI Realm 一起使用的話,JNDI Realm 默認將使用用戶的委托憑證(delegated credentials)連接 Active 目錄。
上述步驟測試環(huán)境為:Tomcat 服務器運行于 Windows Server 2008 R2 64 位標準版上,帶有 Oracle 1.6.0_24 64 位 JDK。
測試環(huán)境如下:
雖然建議使用最新的穩(wěn)定版本,但其實所有 Tomcat 8 的版本都能使用。
配置與 Windows 基本相同,但存在以下一些差別:
配置 Web 應用,以便使用 web.xml 中的 Tomcat 專有驗證方法 SPNEGO
(而不是 BASIC
等)。和其他的驗證器一樣,通過顯式地配置驗證 valve并且在 Valve 中設置屬性來自定義行為。
配置客戶端,以便使用 Kerberos 認證。對于 IE 瀏覽器來說,這就需要 Tomcat 實例位于“本地局域網(wǎng)”安全域中,并且需要在“工具 > Internet 選項 > 高級”中啟用集成 Windows 認證。注意:客戶端和 Tomcat 實例不能使用同一臺機器,因為 IE 會使用未經(jīng)證實的 NTLM 協(xié)議。
正確配置 Kerberos 驗證是有一定技巧性的。下列參考資料有一定幫助。一般來說,Tomcat 用戶郵件列表中的建議也是可取的。
關于該解決方案的完整詳情,可瀏覽 Waffle 網(wǎng)站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 Kerberos 擴展網(wǎng)站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 該項目網(wǎng)站。其關鍵特性為:
關于該解決方案的完整詳情,可瀏覽 該項目網(wǎng)站。其關鍵特性為:
通過配置 IIS 提供 Windows 驗證的步驟如下:
tomcatAuthentication
屬性設為 false
,從而配置 Tomcat 使用來自 IIS 的驗證用戶信息。另一種方法是,將 tomcatAuthorization
設為 true
,從而在Tomcat
執(zhí)行授權時,允許 IIS 進行驗證。Apache httpd 默認并不支持 Windows 驗證,但可以使用很多第三方模塊來實現(xiàn):
采用以下步驟配置 httpd,以便提供 Windows 驗證:
tomcatAuthentication
屬性設為 false
,從而配置 Tomcat 使用來自 httpd 的驗證用戶信息。
更多建議: