Google 的 Chrome 和 IE 等应用程序可以透明地处理 Kerberos 身份验证;但是我找不到与这种透明度相匹配的“简单”Java 解决方案。我发现的所有解决方案都需要存在 krb5.conf 文件和 login.conf 文件,上述应用似乎都不需要。
构建具有 Kerberos SSO 功能的 Java 应用程序的最佳方法是什么?
[更新]:需要明确的是,我需要一个 CLIENT 方解决方案来创建票证而不是验证票证。此外,似乎 SPNEGO 是默认的“包装器”协议(protocol),最终将委托(delegate)给 Kerberos,但我也需要能够处理 SPNEGO 协议(protocol)。
最佳答案
现在有一个简单的解决方案,使用 Apache HTTP Components Client 4.5 或更高。这在 4.5 中仍然被标记为实验性的,所以你的里程可能会有所不同,但这在企业环境中对我来说很好用。
除了 HC 4.5 客户端 jar 之外,您还需要在类路径中包含 httpclient-win、jna 和 jna-platform jar,这些 jar 随 http-component-client 提供。然后构建一个启用 Kerberos 的 HC 客户端,如下所示:
CloseableHttpClient httpclient = WinHttpClients.createDefault();
或使用构建器:
HttpClientBuilder clientBuilder = WinHttpClients.custom();
然后可以在构建客户端之前根据需要进行自定义:
CloseableHttpClient client = clientBuilder.build();
此解决方案无需任何外部配置即可工作,最重要的是解决了在 Windows 7+ 上具有本地管理员权限的用户的内置 JRE 机制中断的问题。这是可能的,因为 Kerberos 票证是通过 JNA 直接从 SSPI API 检索的,而不是通过 JRE 提供的 GSSAPI。
Example code来自 http-components 团队
这一切都归功于 Daniel Doubrovkine 的出色工作Timothy Wall 和 Ryan McKinley
关于java - Java中的简单Kerberos客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804314/