我想从Java访问REST服务。该服务在Windows下运行,可能使用“默认”身份验证机制。我被告知这是Kerberos对NTLM的后退。我可以通过使用Firefox的普通HTTPS GET请求访问该服务(也可以使用HttpRequester) - 没有明确指定任何凭据(显然我的Windows帐户使用)。
如何从Java访问服务?使用java.net.URL进行读取的天真尝试失败,状态代码为400。
答案 0 :(得分:0)
即使是JDK(Oracle的JVM实现)提供了这个,你也可以查看https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html
答案 1 :(得分:0)
这为解决方案提供了高级步骤。您需要Active Directory才能在Windows上使用Kerberos。然后,您将使用Java Spring Security for Kerberos从Java访问REST服务。以下是更具体的步骤。
Java Spring Security for Kerberos库将为您提供繁重的工作,这提供了一个类,可以将Kerberos配置注入HTTP客户端:org.springframework.security.kerberos.client.KerberosRestTemplate
您可以在客户端配置.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程序的人员的凭据,因此您不会使用密钥表(因为密钥表本身只包含一个凭证)。