我想从 Java 访问 REST 服务。该服务在 Windows 下运行,并且可能使用“默认”身份验证机制。有人告诉我这是 Kerberos,它可以回退到 NTLM。我可以使用 Firefox(也与 HttpRequester 一起使用)通过普通的 HTTPS GET 请求访问该服务 - 无需明确指定任何凭据(显然使用了我的 Windows 帐户)。
如何从 Java 访问该服务?使用 java.net.URL 读取的天真尝试失败,状态码为 400。
甚至 JDK(Oracle 的 JVM 实现)也提供了这个,你可以看看https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html
这提供了解决方案的高级步骤。您需要 Active Directory 才能将 Kerberos 与 Windows 结合使用。然后您将要做的是使用 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 程序的人的凭证,因此您不会使用 keytab(因为 keytab 本身只包含一个凭证)。