Google Chrome 和 IE 等应用程序可以透明地处理 Kerberos 身份验证;但是我找不到一个“简单”的 Java 解决方案来匹配这种透明度。我发现的所有解决方案都需要存在 krb5.conf 文件和 login.conf 文件,而上述应用程序似乎都不需要。
构建具有正常运行的 Kerberos SSO 功能的 Java 应用程序的最佳方法是什么?
[更新]:要明确的是,我需要一个CLIENT侧面解决方案创建票证不验证它们。另外,SPNEGO 似乎是默认的“包装”协议,最终将委托给 Kerberos,但我也需要能够处理 SPNEGO 协议。
现在有一个简单的解决方案,使用Apache HTTP 组件客户端 http://hc.apache.org/downloads.cgi4.5 或更高。这在 4.5 中仍然被标记为实验性的,因此您的情况可能会有所不同,但这对我来说在企业环境中工作得很好。
除了 HC 4.5 客户端 jar 之外,您还需要在类路径中包含 httpclient-win、jna 和 jna-platform 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。
示例代码 https://hc.apache.org/httpcomponents-client-ga/httpclient-win/examples/org/apache/http/examples/client/win/ClientWinAuth.java来自 http-components 团队
这一切都得益于丹尼尔·杜布罗夫金 https://github.com/dblock 蒂莫西·沃尔 https://github.com/twall and 瑞安·麦金利 https://github.com/ryantxu
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)