2015-10-26 3 views
0

Я использую ksoap2 3.6.NTLM Аутентификация с помощью ksoap2 в Android

Я пытаюсь получить доступ к мыльной веб-службе, защищенной NTLM. Я нашел файл ksoap2-extra-ntlm-3.6.0.jar и добавил это в свой проект, считая, что это моя экономия.

NtlmTransport ntlmTransport = new NtlmTransport(BASE_URL); 
ntlmTransport.setCredentials(USERNAME, PASSWORD, DOMAIN, ""); 
ntlmTransport.call(name_space + method_name, envelope); 

Однако, я получаю неавторизованный код ответа 401. Я подтвердил свое имя пользователя, пароль и домен через .NET и методы проверки подлинности на основе браузера, поэтому я знаю, что они верны.

Вопрос: как я могу пройти аутентификацию и пройти код 401?

Спасибо.

+0

Вы можете поделиться ссылкой с того места, где вы загрузили ksoap2-extra-ntlm-3.6.0.jar. Я искал много, но не смог его найти. –

ответ

0

Это то, что сработало для меня.

Поскольку ksoap2 является открытым исходным кодом, я заглянул в код для NtlmTransport и изменил метод вызова следующим образом.

Я удалил:

BasicHttpParams httpParameters = new BasicHttpParams(); 
HttpConnectionParams.setConnectionTimeout(httpParameters, this.timeout); 

DefaultHttpClient client = new DefaultHttpClient(httpParameters); 
    client.getAuthSchemes().register("ntlm", new NtlmTransport.NTLMSchemeFactory()); 

NTCredentials credentials = new NTCredentials(this.user, this.password, this.ntWorkstation, this.ntDomain); 

client.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials); 

и заменить этот код с помощью этого кода:

NTCredentials ntCredentials = new NTCredentials(user, password, ntWorkstation, ntDomain); 

CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY), ntCredentials); 

HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 

clientBuilder.useSystemProperties(); 
clientBuilder.setDefaultCredentialsProvider(credentialsProvider); 
CloseableHttpClient client = clientBuilder.build(); 

Я завернул выполнить и код ответа с попробовать ... наконец-то блокировать, чтобы закрыть клиент в наконец, блокировать. Сейчас работает как шарм.

Я добавил

compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 

моему Gradle файл.

Мысль кто-то может принести пользу.

Спасибо.

Смежные вопросы