我们使用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