如何连接到需要Java的Windows客户端身份validation的REST服务?

我想从Java访问REST服务。 该服务在Windows下运行,并可能使用“默认”身份validation机制。 我被告知这是Kerberos与NTLM的后备。 我能够通过使用Firefox的简单的HTTPS GET请求访问服务(也适用于HttpRequester) – 没有明确指定任何凭据(显然我的Windows帐户使用)。

我怎样才能从Java访问服务? 天真的尝试使用java.net.URL读取失败,状态码为400。

即使JDK(Oracle的JVM实现)也提供了这个功能,你可以看一下https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html

这为解决方案提供了高级步骤。 您需要Active Directory才能在Windows上利用Kerberos。 那么你将要做的就是使用Java Spring Security for Kerberos来访问Java中的REST服务。 下面是更具体的步骤。

  1. 用于Kerberos库的Java Spring Security将为您完成繁重的任务,它提供了一个类来将Kerberos配置注入HTTP客户端: org.springframework.security.kerberos.client.KerberosRestTemplate

  2. 您可以在客户端配置.properties文件中定义一些Kerberos属性。 这里是关于Kerberos的文件中最重要的片段:

 KERBEROS.FLAG=Y KERBEROS.DEBUG=true SERVICE_ACCOUNT_PRINCIPAL = HTTP/some.hostname@YOUR.REALM KEYTAB_LOCATION = file:///C:/path/to/filename.keytab KDC = server.fqdn.name KDC_DOMAIN = YOUR.REALM KRB5 = file:///C:/path/to/krb5.conf 

编辑:

加入Windows AD域的计算机上的Java客户端不需要Kerberos密钥表。 由于您要使用运行Java程序的人员的凭据,因此不会使用密钥表(因为密钥表本身只包含一个凭据)。

请参阅官方Spring Security网站