如何连接到需要Java的Windows客户机认证的REST服务?
我想从Java访问REST服务。该服务在Windows下运行,并可能使用“默认”身份验证机制。我被告知它是Kerberos的后备NTLM。我可以通过使用Firefox的简单HTTPS GET请求访问服务(也可以与HttpRequester一起使用) - 没有明确指定任何凭据(显然是使用我的Windows帐户)。如何连接到需要Java的Windows客户机认证的REST服务?
如何从Java访问服务?一个天真的尝试使用的java.net.URL读取失败,状态码400
即使是JDK(JVM实现甲骨文)提供了这一点,你可以看看https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html
因为在客户端使用OpenJDK,所以Oracle JVM不是一种选择。 – Gustave
这提供了高层次的解决方案的步骤。您需要Active Directory才能利用Kerberos与Windows。然后,您将使用Java Spring Security for Kerberos来访问Java中的REST服务。以下是更具体的步骤。
Java的Spring Security进行的Kerberos库将做繁重你,这提供了一个类中注入Kerberos配置到HTTP客户端:
org.springframework.security.kerberos.client.KerberosRestTemplate
您在客户端中定义了一些Kerberos的性质配置.properties文件。下面是从文件中最重要的片段相对于Kerberos的:
KERBEROS.FLAG=Y KERBEROS.DEBUG=true SERVICE_ACCOUNT_PRINCIPAL = HTTP/[email protected] KEYTAB_LOCATION = file:///C:/path/to/filename.keytab KDC = server.fqdn.name KDC_DOMAIN = YOUR.REALM KRB5 = file:///C:/path/to/krb5.conf
编辑:
的Kerberos keytabs不需要使用Windows AD域的加入机器上的Java客户端。由于您要使用运行Java程序的人员的凭据,因此您不会使用密钥表(因为密钥表本身仅包含一个凭证)。
Hi @Gustave;我已经对这个问题做了一个重要的编辑,如果它回答了你的问题,请将其标记为可以帮助其他人;否则请让知道如果有任何 –
嗨T苍鹭,对不起,但我根本不明白你的答案。 “杠杆”是什么意思?所有的环境已经建立起来了,我对此没有什么影响。 httpclient-win完成了这项工作,没有任何明显的繁重工作,但是像往常一样,当发生某些事情时,发现它为什么这样做的优先级较低。 – Gustave
org.apache.httpcomponents:HttpClient的双赢:4.5.3看起来很有希望。 – Gustave
httpclient-win的作品,但我没有找到为什么或如何。 – Gustave
嗨;如果我们回答了您的问题,请将其标记为会将其验证给社区中的其他人;否则,请告诉我们,如果有的话。 –