我有一个axis2(v1.5.3)客户端,需要使用IIS进行Kerberos / NTLM身份验证。我怎样才能做到这一点?这是我现在拥有的代码,它失败并显示401 - unauthorized错误:

List<String> authScheme = new ArrayList<String>();
authScheme.add(HttpTransportProperties.Authenticator.NTLM);
HttpTransportProperties.Authenticator ntlm =
                 new HttpTransportProperties.Authenticator();
ntlm.setAuthSchemes(authScheme);
ntlm.setUsername("Administrator");
ntlm.setPassword("password");
ntlm.setHost("http://server/_vti_bin/someservice.asmx");
ntlm.setPort(80);
ntlm.setDomain("server_domain");
Options options = webs._getServiceClient().getOptions();
options.setProperty(HTTPConstants.AUTHENTICATE, ntlm);
stub._getServiceClient().setOptions(options);


使用C#编写的客户端可以在相同的身份验证设置下正常运行:

CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(webs.Url), "NTLM",
            new NetworkCredential("Administrator", "password", "server_domain"));
stub.Credentials = myCache;

最佳答案

AXIS2中的NTLM存在问题。它以ntlm.setHost()方法为中心。创建AuthScope时,此处的条目既用作NTLM交换中的WORKSTATION,又用作远程主机。这会造成Catch-22情况,其中NTLM无法使用HttpTransportProperties.Authenticator技术工作。您或者得到“ 401未经授权”,或者得到“没有找到 @HOST的凭据”。

https://issues.apache.org/jira/browse/AXIS2-4595

彼得

关于java - axis2客户端NTLM身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5865539/

10-11 20:15