Spring security 如何将缓存票证与KerberosRestTemplate一起使用?

Spring security 如何将缓存票证与KerberosRestTemplate一起使用?,spring-security,active-directory,single-sign-on,kerberos,spring-security-kerberos,Spring Security,Active Directory,Single Sign On,Kerberos,Spring Security Kerberos,我想为我的spring security kerberos身份验证实现集成测试。 为此,有KerberosRestTemplate()KerberosRestTemplate有一个默认构造函数,其描述为“如果要使用缓存票证,请将keyTabLocation和userPrincipal保留为空” 为了研究,我写了一个简单的类: public static void main(String[] args) { KerberosRestTemplate krt = new Ker

我想为我的spring security kerberos身份验证实现集成测试。 为此,有KerberosRestTemplate()KerberosRestTemplate有一个默认构造函数,其描述为“如果要使用缓存票证,请将keyTabLocation和userPrincipal保留为空”

为了研究,我写了一个简单的类:

   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
我的浏览器(firefox)已成功通过kerberos sso身份验证

我使用Windows server 2012。和Windows7作为客户端

如何使用缓存票据?(ktpass是否可以生成客户端密钥表?)


顺便说一句,我的英语很抱歉。

您正在检查Windows凭据缓存,而Java正在维护它的独立性。为了查看Java的凭据缓存,您应该从
JRE/bin
文件夹执行
klist
命令,并且是否有办法让Java使用Windows'
klist
?@MichelJung您需要在注册表中设置AllowTGTSessionKey=1属性。看见
#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)