2

Я хочу внедрить интеграционный тест для проверки подлинности Kerberos для безопасности весны. Существует KerberosRestTemplate (reference) для этой цели. KerberosRestTemplate имеет конструктор по умолчанию с описанием «Оставить keyTabLocation и userPrincipal пустым, если вы хотите использовать кешированный билет».Как использовать кешированный билет с KerberosRestTemplate?

Для исследования я написал тривиальный класс:

public static void main(String[] args) { 
     KerberosRestTemplate krt = new KerberosRestTemplate(); 
     String result = krt.getForObject("http://testserver.testad.local:8080/", String.class); 
     System.out.println(result); 
    } 

Когда я запустить его, исключение брошенный:

Exception in thread "main" org.springframework.web.client.RestClientException: Error running rest call; nested exception is java.lang.IllegalArgumentException: Null name not allowed 
     at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestT 
emplate.java:196) 
     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:530) 
     at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237) 
     at edu.mezlogo.Application.main(Application.java:9) 
Caused by: java.lang.IllegalArgumentException: Null name not allowed 
     at sun.security.krb5.PrincipalName.<init>(Unknown Source) 
     at sun.security.krb5.PrincipalName.<init>(Unknown Source) 
     at javax.security.auth.kerberos.KerberosPrincipal.<init>(Unknown Source) 
     at javax.security.auth.kerberos.KerberosPrincipal.<init>(Unknown Source) 
     at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestT 
emplate.java:182) 
     ... 3 more 

Моего Klist содержит правильный кэшированный билет, для моей службы.

#2>  Client: deniz @ TESTAD.LOCAL 
     Server: HTTP/testserver.testad.local @ TESTAD.LOCAL 
     KerbTicket Encryption Type: RSADSI RC4-HMAC(NT) 
     Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize 
     Start Time: 2/5/2016 6:17:39 (local) 
     End Time: 2/5/2016 16:16:32 (local) 
     Renew Time: 2/12/2016 6:16:32 (local) 
     Session Key Type: RSADSI RC4-HMAC(NT) 

И мой браузер (firefox) успешно прошел аутентификацию с помощью kerberos sso.

Я использую сервер Windows 2012. И Windows 7 как клиент.

Как использовать кешированный билет? (И ktpass может генерировать клиентский ключ?)

P.s. Извините за мой английский.

ответ

0

Вы проверяете кеш учетных данных Windows, в то время как Java поддерживает его отдельно. Чтобы просмотреть кэш учетных данных Java, вы должны выполнить команду klist из папки JRE/bin