мы используем 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 с тем же именем области и использовать этот билет для запуска приложения.
Одна идея, которую я нашел, состояла в том, чтобы проходить проверку подлинности по LDAP Active Directory с использованием билета 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 () с билетом нашего сервера, но я не знаю, как это сделать. ОБНОВЛЕНИЕ: KerberosTicket (). GetServer () возвращает только KerberosPrincipal, который не содержит ничего, кроме имени и области билета сервера, поэтому он не подходит для проверки.
Спасибо за вашу помощь,
Memminger