Хорошо, после нескольких попыток я нашел решение. Проблема была не в коде, а в реестре. Как указано на этой странице, начиная с Java 7 Вы не можете получить доступ к билетам Windows изначально. Чтобы изменить это, вам необходимо установить дополнительный раздел реестра. Для этого зайдите в папку реестра
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
и добавьте ключ
Value Name: AllowTgtSessionKey
Value Type: REG_DWORD
Value: 0x01
Чтобы полностью выполнить эту работу, вам понадобятся некоторые дополнительные настройки:
Файл конфигурации jaas
В файле конфигурации jaas вы должны указать, какие модули безопасности должен использовать jaas. Часть перед скобками называет вашу конфигурацию. Если вы используете библиотеки GSS, вы должны назвать это com.sun.security.jgss.krb5.initiate
. Когда вы используете LoginContext
, вы просто передаете имя конфигурации в качестве первого параметра. Мой jaas.conf
выглядит следующим образом:
com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache = true;
};
Конфигурация Kerberos
Вам также потребуется конфигурация для модуля Kerberos. Это в основном содержит адрес области, но может содержать дополнительную информацию. Минимальный рабочий пример:
[realms]
YOUR.REALM.COM = {
kdc = your.realm.com:88
default_domain = REALM.COM
}
Обратите внимание, что это чувствительно к регистру!
Свойства системы
Наконец, вам нужно настроить Java, чтобы найти эти файлы. Это можно сделать, задав свойства при запуске или позвонив по номеру System.setProperty()
:
System.setProperty("java.security.krb5.conf", "src/resources/krb5.conf");
System.setProperty("java.security.auth.login.config", "src/resources/jaas.conf");