我已经使用了Axis已经有几年了 - 然后,Axis依赖于Apache commons httpclient 3.从阅读一些邮件列表,它看起来像this is still the case。 (如果没有,最后一段应该提供一些值得欢迎的帮助。)
Apache commons httpclient 3不支持通过HTTP进行“集成Windows身份验证”(即与Kerberos的协商身份验证机制,又名“SPNEGO”。)实际上,它不支持NTLMv2,仅支持NTLMv1,这意味着您将无法对许多需要NTLMv2而无需修改的IIS服务器进行身份验证。
尽管无可厚非,但我认为最好的选择是创建一个新的AuthScheme,它调用Windows SSPI库进行身份验证。不幸的是,你需要使用JNI来做到这一点。幸运的是,AuthScheme已准备好执行基于会话的质询 - 响应身份验证模式(SPNEGO与已支持的NTLM类似)。基本上,您将base64编码输入和输出字节缓冲区为本地InitializeSecurityContext调用。我承认编写这个程序很繁琐,但我可以确认它确实可以让您对IIS服务器执行集成Windows身份验证。
(不幸的是,如果你需要你的客户是跨平台的,你还需要编写Unix上的必要GSSAPI代码。)
另一种方法是编写使用Java的Kerberos库新AuthScheme (JAAS)。我不太了解这些,说实话,因为它需要从系统kerberos库中单独配置。也就是说,在Windows上,您必须编写一些指向您的Active Directory服务器的Kerberos配置文件。在我看来,这并不是真正的“整合”。如果您将软件分发给客户,而且他们希望“只是工作”,这可能不适合您。另外,虽然JAAS已经有一段时间了,我相信,早期版本缺乏的是被要求谈谈对Active Directory一些身份验证机制,所以我想你会需要一个Java 6的运行时间。现在
,如果我错了,你可以使用Axis2的新的Apache HTTP组件HttpClient的4,那么你就好得多。 httpclient 4使用Java的Kerberos库支持SPNEGO,这意味着一旦您不必编写自己的AuthScheme,只需配置C:\ WINDOWS \ KRB5.INI,并且您应该能够利用集成Windows身份验证。但是,为了避免必须配置JAAS的手动步骤,您仍然需要调用本地SSPI方法。