我正在尝试用 Java 实现 HTTP 代理,为所有请求添加 Windows 集成身份验证。
我的想法基本上是在代理(在域中)和服务器之间协商正确的身份验证方案,据我了解,这应该会产生某种令牌,可以简单地将其添加到授权中的请求中标题。
这里的背景是我们正在尝试将 Selenium Grid 与域外的代理一起使用。所以直接在浏览器中协商身份验证是行不通的。
我们已经有一个 BrowserMobProxy 来处理基本身份验证,但是我们还需要 WIA。
有人知道如何生成所需的令牌吗?或者也许我弄错了,这种方法由于某种原因根本不起作用?
如有任何帮助,我们将不胜感激!
如果可能的话我会忽略NTLM;每个人都在努力摆脱它,而不是拥有更多。
Java 似乎具有内置 Kerberos 支持作为 JAAS 的一部分,它可以使用其内部实现(需要提供凭据,例如作为密钥表)或与 Windows 本机 SSPI 集成(可以自动使用服务的 AD)证书)。理论上,只要使用SSPI,就可以做Kerberos和NTLM。还有另一种实现,Apache Kerby,但它似乎更加简单。
请注意,HTTP Negotiate 使用 SPNEGO – 这是对实际原始 Kerberos 令牌 (AP-REQ) 的两层包装,只是为了避免在阅读文档和尝试发送错误类型的“Kerberos 令牌”时出现混淆。 Kerberos 周围的标准接口是 GSS API(它生成自己的令牌,基本上只在内部携带 Kerberos 令牌),Java 可以本机执行此操作 - 但许多 Windows 协议使用 SPNEGO,这是另一个中间层(即复用 Kerberos 和NTLM),并且大多数 Web 服务器会特别需要 GSS
我还没有处理过 Java 到这个程度,但是 kerb4j 看起来像是你需要代表你处理所有事情(通过 Apache Kerby 获取 Kerberos 票证,生成 GSS-SPNEGO 令牌等)。