我们使用JAAS在Java应用程序中使用Windows Kerberos票证缓存启用单点登录.我们的jaas.conf配置文件如下所示:
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