我有一个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/