java - Java中的简单Kerberos客户端?

标签 java kerberos

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/

相关文章:

java - 在 Spring Boot 中设置隔离级别

java - 大输入的数字格式异常

linux - 登录脚本使用机器密码让 kinit 在登录时获取票证

authentication - HDFS 数据节点未开始使用 kerberos

java - 如何为 WebSphere 上的远程 EJB 调用启用 Kerberos 身份验证?

java - 使用数组作为其键/类型的集合

java - 在 Android 上回收膨胀 View

java - 安卓:“BadTokenException:无法添加窗口;你的 Activity 在运行吗?

java - Kerberos 票证验证的功能测试

active-directory - Kerberos:kvno 在客户端票据中是 '1'