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

时间:2017-02-15 16:48:26

标签: java windows rest kerberos ntlmv2

我想从Java访问REST服务。该服务在Windows下运行,可能使用“默认”身份验证机制。我被告知这是Kerberos对NTLM的后退。我可以通过使用Firefox的普通HTTPS GET请求访问该服务(也可以使用HttpRequester) - 没有明确指定任何凭据(显然我的Windows帐户使用)。

如何从Java访问服务?使用java.net.URL进行读取的天真尝试失败,状态代码为400。

2 个答案:

答案 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服务。以下是更具体的步骤。

  1. Java Spring Security for Kerberos库将为您提供繁重的工作,这提供了一个类,可以将Kerberos配置注入HTTP客户端:org.springframework.security.kerberos.client.KerberosRestTemplate

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

  3. 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程序的人员的凭据,因此您不会使用密钥表(因为密钥表本身只包含一个凭证)。

    Refer to the official Spring Security Website