我們使用JAAS在使用Windows Kerberos票證緩存的Java應用程序中啓用單一登錄。我們的Jaas.conf配置文件看起來是這樣的:如何根據Java中的服務器驗證Kerberos票證?
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
有了這個,我們可以創建一個JAAS LoginContext對象,併成功地獲得用戶的Kerberos票據。我們使用JMI將此票證發送出服務器應用程序。但我們無法做到的是在服務器上驗證Kerberos票據實際上是由我們的Active Directory創建的。
目前,我們通過簡單地檢查服務器主體(KerberosTicket.getServer())名稱是否在我們的領域名稱中包含領域名稱來驗證票證。但是,當然,任何人都可以使用相同的域名設置自己的Kerberos服務器,並使用該票證來啓動應用程序。
我發現的一個想法是使用Kerberos票證對Active Directory LDAP進行身份驗證。不幸的是,我們使用Windows 7並且重新使用Kerberos票據來對LDAP進行身份驗證僅適用於設置註冊表項(請參閱http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html,搜索allowtgtsessionkey)。這是我們的用戶無法接受的。
有什麼方法可以根據我們的Active Directory服務器驗證票證嗎?我懷疑有一種方法可以檢查KerberosTicket.getServer()票證是否等於我們服務器的票證,但我不知道該怎麼做。更新:KerberosTicket()。getServer()僅返回一個KerberosPrincipal,其中只包含服務器故障單名稱和領域,所以它不適合進行驗證。
感謝您的幫助, memminger
你有沒有想過這個? – 2014-08-13 00:13:14