Кто-нибудь знает, как получить билет на обслуживание из Центра распределения ключей (KDC) с использованием Java GSS-API?
У меня есть приложение с толстым клиентом, которое сначала проверяет подлинность через JAAS с помощью модуля Krb5LoginModule для извлечения TGT из кеша билетов (фон: Windows, например, использует реализацию kerberos и сохраняет билет на выдачу билетов в области защищенной памяти). Из LoginManager я получаю объект Subject, который содержит TGT. Теперь я надеялся, что когда я создам конкретный объект GSSCredential для своей службы, билет на обслуживание будет помещен в личные учетные данные Subject (я читал так где-то в Интернете). Поэтому я попробовал следующее:
// Exception handling ommitted
LoginContext lc = new LoginContext("HelloEjbClient", new DialogCallbackHandler());
lc.login()
Subject.doAs(lc.getSubject(), new PrivilegedAction() {
public Object run() {
GSSManager manager = GSSManager.getInstance();
GSSName clientName = manager.createName("clientUser", GSSName.NT_USER_NAME);
GSSCredential clientCreds = manager.createCredential(clientName, 8 * 3600, createKerberosOid(), GSSCredential.INITIATE_ONLY);
GSSName serverName = manager.createName("[email protected]", GSSName.NT_HOSTBASED_SERVICE);
manager.createCredential(serverName, GSSCredential.INDEFINITE_LIFETIME, createKerberosOid(), GSSCredential.INITIATE_ONLY);
return null;
}
private Oid createKerberosOid() {
return new Oid("1.2.840.113554.1.2.2");
}
});
К сожалению, я получаю исключение GSSException: не указаны допустимые учетные данные (уровень механизма: не удалось найти какой-либо Kerberos tgt).