Apache Axis2 1.5.1 и NTLM аутентификация - PullRequest
2 голосов
/ 09 июня 2010

Я просмотрел все обсуждения здесь на StackOverflow, касающиеся NTLM и Java, и я не могу найти ответ.Я постараюсь быть более конкретным.

Вот некоторый код, который возвращает клиентскую заглушку, которая (я надеюсь) настроена для аутентификации NTLM:

ServiceStub getService() {
  try {
    ServiceStub stub = new ServiceStub(
        "http://myserver/some/path/to/webservices.asmx"); // this service is hosted on IIS
    List<String> ntlmPreferences = new ArrayList<String>(1);
    ntlmPreferences.add(HttpTransportProperties.Authenticator.NTLM);
    HttpTransportProperties.Authenticator ntlmAuthenticator = new HttpTransportProperties.Authenticator();
    ntlmAuthenticator.setAuthSchemes(ntlmPreferences);
    ntlmAuthenticator.setUsername("me");
    ntlmAuthenticator.setHost("localhost");
    ntlmAuthenticator.setDomain("mydomain");
    Options options = stub._getServiceClient().getOptions();
    options.setProperty(HTTPConstants.AUTHENTICATE, ntlmAuthenticator);
    options.setProperty(HTTPConstants.CHUNKED, "false");
    return stub;
  } catch (AxisFault e) {
      e.printStackTrace();
  }
      return null;
}

Возвращает действительный объект SerivceStub,Когда я пытаюсь вызвать вызов из заглушки, в журнале я вижу следующее:

Jun 9, 2010 12:12:22 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: NTLM authentication scheme selected
Jun 9, 2010 12:12:22 PM org.apache.commons.httpclient.HttpMethodDirector authenticate
SEVERE: Credentials cannot be used for NTLM authentication: org.apache.commons.httpclient.UsernamePasswordCredentials

У кого-нибудь есть решение этой проблемы?

Ответы [ 2 ]

3 голосов
/ 31 августа 2010

Попробуйте это: http://robaustin.wikidot.com/axis Это работает для меня.Вам нужно вызвать setupCertsAndCredential () перед getService ()

private void setupCredential() {
  final NTCredentials nt = new NTCredentials("user", "pass", "", "domain");
  final CredentialsProvider myCredentialsProvider = new CredentialsProvider() {
   public Credentials getCredentials(AuthScheme scheme, String host, int port, boolean proxy) throws CredentialsNotAvailableException {
    return nt;
   }
  };
  DefaultHttpParams.getDefaultParams().setParameter("http.authentication.credential-provider", myCredentialsProvider);
 }

ServiceStub getService() {  

  try {   
    ServiceStub stub = new ServiceStub(   
        "http://myserver/some/path/to/webservices.asmx"); // this service is hosted on IIS   

    return stub;    
  } catch (AxisFault e) {    
      e.printStackTrace();    
  }    
      return null;    
}    
0 голосов
/ 15 марта 2013

HttpClient не поддерживает NTLM v2, поэтому я использую библиотеку JCIFS для возврата типа сообщений NTLM v1,2,3, как описано на этом сайте

http://devsac.blogspot.com/2010/10/supoprt-for-ntlmv2-with-apache.html

Я просто использовал файл JCIFS_NTLMScheme.java с сайта выше, чтобы зарегистрировать схему аутентификации, и она сработала !!!!

Пример клиента:

List authSchema = new ArrayList();
AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, org.tempuri.JCIFS_NTLMScheme.class);
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
auth.setUsername("");
auth.setPassword("");
auth.setDomain("");
auth.setHost("");
auth.setPort();
List authPrefs = new ArrayList(1);
authPrefs.add(AuthPolicy.NTLM);
auth.setAuthSchemes(authPrefs);
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth); 
...