如何从Java连接需要Windows客户端身份验证的REST服务?

3

我想从Java访问一个REST服务。该服务在Windows下运行,可能使用“默认”的身份验证机制。有人告诉我它是Kerberos,具备回退到NTLM的能力。我可以通过纯粹的HTTPS GET请求来访问服务,使用Firefox(也可以使用HttpRequester) - 没有明确指定任何凭据(显然使用我的Windows帐户)。

我如何从Java访问该服务?尝试使用java.net.URL读取的天真尝试失败,返回状态码400。


org.apache.httpcomponents:httpclient-win:4.5.3 看起来很有前途。 - Gustave
httpclient-win 可以工作,但我还没有弄清楚为什么或怎样工作。 - Gustave
如果我们已经回答了您的问题,请将其标记为已解决,这将向社区中的其他人验证;否则,请告诉我们是否还有任何疑问。 - T-Heron
2个回答

0

Oracle JVM 可能不是一个选项,因为客户端使用的是 OpenJDK。 - Gustave

0

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

  1. Java Spring Security for Kerberos库将为您完成繁重的工作,它提供了一个类来将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 keytabs。由于您想要使用运行Java程序的人的凭据,因此您不会使用keytab(因为keytab本身仅包含一个凭据)。

请参阅官方Spring Security网站


嗨@Gustave;我对这个问题进行了重要的编辑,如果解答了你的问题,请将其标记为已解决,以便帮助其他人;否则请告诉我是否还有什么需要帮忙的。 - T-Heron
嗨T-Heron,抱歉,但我根本不理解你的回答。你所说的“杠杆作用”是什么意思?整个环境已经设置好了,我对此几乎没有什么影响力。httpclient-win可以胜任工作,而且没有任何明显的重负,但通常情况下,当某些东西起作用时,找出它为什么这样做的优先级较低。 - Gustave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接