3

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

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

4

2 回答 2

0

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

于 2017-02-17T09:02:21.477 回答
0

这提供了解决方案的高级步骤。您需要 Active Directory 才能将 Kerberos 与 Windows 结合使用。然后您将要做的是使用 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 密钥表。由于您想使用运行 Java 程序的人的凭证,因此您不会使用 keytab(因为 keytab 本身只包含一个凭证)。

参考Spring Security官方网站

于 2017-03-06T21:17:56.780 回答