为了在 Windows 上使用 Java 进行客户端 HTTP SPNEGO 身份验证,您需要设置 Windows 注册表项allowtgtsessionkey。这是有据可查的。我不明白的是人们如何解决这个问题?大多数公司网站永远不会接受为了单个软件而在 Windows 中更改此注册表项。如果需要在组织中的每个工作站上进行更改,还要考虑一下麻烦。但这只是理论,因为到目前为止我无法说服我们的任何客户更改此注册表项。
我不怪他们。大多数公司管理员会认为这是一种放松安全措施,因此会反对。
我读过这篇文章: Java 或命令行实用程序中是否有办法使用本机 SSPI API 获取服务的 Kerberos 票证?
但它现在已经很旧了。
所以我真的,真的不明白人们如何让 Windows + Java 客户端 + Kerberos 在大学环境、家庭用户等之外的任何地方工作。
我从企业管理员那里得到的问题是“当 IE 和 Firefox 等应用程序在不设置此键的情况下执行 SPNEGO没有问题时,为什么我们需要设置此注册表键?”。嗯,我知道答案是什么。这是因为(很可能)IE 和 Firefox 等应用程序基于 Windows 原生 GSS API (SSPI),而 Sun 的 Java 使用自己的实现。
我假设使用类似WAFFLE的东西可以解决问题,但我更喜欢纯 Java 解决方案。我还假设使用基于 Java 的解决方案(例如 Spring security 或 Apache HttpClient)将无济于事,因为它们都会遇到这个问题。
任何帮助或指示将不胜感激。
更新1:
我发现在 Oracle 的错误数据库中有一个RFE。Oracle 员工也提交了一个补丁,并在 JDK 邮件列表中讨论了这个特性。除了据我所知,这在当前的 Java 7 中是不可用的,甚至不是实验性的,这并没有让我变得更聪明。正确的?
更新2:
这个问题现在在 OpenJDK 安全开发邮件列表中再次出现。