мы используем 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 с тем же именем области и использовать этот билет для запуска приложения.
Одна из идей, которые я нашел, заключалась в аутентификации в Active Directory LDAP с использованием билета Kerberos. К сожалению, мы используем Windows 7, и повторное использование билета Kerberos для аутентификации по LDAP работает только при установке записи в реестре (см. http://java.sun.com/j2se/1.5.0/docs/руководство/безопасность/jgss/tutorials/Troubleshooting.html, ищите allowtgtsessionkey). Это неприемлемо для наших пользователей.
Есть ли способ проверить билет на нашем сервере Active Directory? Я подозреваю, что есть способ проверить, совпадает ли билет KerberosTicket.getServer () с билетом нашего сервера, но я понятия не имею, как это сделать. ОБНОВЛЕНИЕ: KerberosTicket (). GetServer () возвращает только KerberosPrincipal, который не содержит ничего, кроме имени и области билета сервера, поэтому он не подходит для проверки.
Спасибо за помощь, меммингер