мы используем JAAS для включения Single Sign On в приложении Java, используя кеш кеша Windows Kerberos. Наш конфигурационный файл jaas.conf выглядит так:
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
С помощью этого мы можем создать JaCon LoginContext и успешно получить билет пользователя Kerberos. Мы отправляем этот билет на серверное приложение с использованием JMI. То, что нам не удается сделать, это проверить на сервере, что билет Kerberos был фактически создан нашей Active Directory.
В настоящий момент мы делаем очень небезопасную проверку билета, просто проверяя, имеет ли имя Server Principal (KerberosTicket.getServer()) наше доменное имя в части царства. Но, конечно, любой может создать собственный сервер Kerberos с тем же именем области и использовать этот билет для запуска приложения.
Одна из моих идей заключалась в том, чтобы проверить подлинность Active Directory LDAP с помощью билета Kerberos. К сожалению, мы используем Windows 7 и повторное использование билета Kerberos для аутентификации против LDAP работает только при настройке записи реестра (см. http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html, поиск allowtgtsessionkey). Это неприемлемо для наших пользователей.
Есть ли способ проверить билет на нашем сервере Active Directory? Я подозреваю, что есть способ проверить, соответствует ли билет KerberosTicket.getServer() билет нашего сервера, но я не знаю, как это сделать. UPDATE: KerberosTicket(). GetServer() возвращает только KerberosPrincipal, который не содержит ничего, кроме имени билета сервера и области, поэтому он не подходит для проверки.
Спасибо за вашу помощь, Memminger