HttpUrlConnection在Android上找不到NTLM挑战

我正在尝试使用HttpUrlConnection类将我的 Android应用程序连接到IIS服务器.

我的服务器需要用户进行身份验证,因此它向客户端发送以下质询:

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM

我的问题是HttpUrlConnection似乎没有解析它.因此,getPasswordAuthentication()永远不会调用,并返回IOException“未发现身份验证质询”.

这是我的代码:

Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {                  

            return new PasswordAuthentication("myUsername", "myPassword".toCharArray());
    }               
});

URL url = new URL(myUrl);               
HttpURLConnection conn = (HttpURLConnection) url.openConnection();          

conn.setRequestMethod("GET");
conn.setRequestProperty("Accept-Encoding", "gzip");
conn.setRequestProperty("Accept-Charset", "UTF-8");         
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Connection", "close");
conn.setDoOutput(true);
conn.setDoInput(true);          

try 
{   
    conn.connect();             
    status_code = conn.getResponseCode();   
}catch (IOException e) {
    ...             
}

我真的开始认为HttpUrlConnection不支持NTLM挑战.我看到一些图书馆似乎在做这项工作,但我宁愿不使用外部库.

有人可以确认是否有可能在没有外部库的情况下使HttpUrlConnection处理NTLM挑战?

我只能通过设置AuthScheme和下面的库来使它与HttpClient一起工作: http://jcifs.samba.org/src/jcifs-krb5-1.3.17.zip.

HttpClient httpclient = new HttpClient(httpParameters, context);
NTCredentials creds = new NTCredentials(“username”, “password”, "", "dir");
httpclient.getCredentialsProvider().setCredentials(
              new AuthScope(context.getString(“whatever is your main URL”), -1), creds);
httpclient.getAuthSchemes().register("ntlm", new NTLMSchemeFactory());

然后实现JCIFS引擎和工厂.你可以在http://hc.apache.org/httpcomponents-client-4.2.x/ntlm.html找到样品

相关文章
相关标签/搜索