【问题标题】:NTLM Authentication with ksoap2 in Android在 Android 中使用 ksoap2 进行 NTLM 身份验证
【发布时间】:2015-10-26 22:13:24
【问题描述】:

我正在使用 ksoap2 3.6。

我正在尝试访问使用 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 代码?

谢谢。

【问题讨论】:

  • 你能分享你下载ksoap2-extra-ntlm-3.6.0.jar的链接吗?我搜索了很多,但找不到它。

标签: android authentication ksoap2 ntlm


【解决方案1】:

这对我有用。

由于 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();

我用 try...finally 块包装了执行和响应代码,以在 finally 块中关闭客户端。现在就像一个魅力。

我加了

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

到我的 gradle 文件。

认为有人可能会受益。

谢谢。

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多