Я пытаюсь использовать Apache / Jakarta HttpClient 4.1.1 для подключения к произвольной веб-странице с указанными учетными данными. Чтобы проверить это, у меня есть минимальная установка IIS 7.5 на моем компьютере разработчика, где одновременно активен только один режим аутентификации. Обычная проверка подлинности работает нормально, но Digest и NTLM возвращают сообщение об ошибке 401 всякий раз, когда я пытаюсь войти в систему. Вот мой код:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("http://localhost/");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new NTCredentials("user", "password", "", "localhost"));
if (!new File(System.getenv("windir") + "\\krb5.ini").exists()) {
List<String> authtypes = new ArrayList<String>();
authtypes.add(AuthPolicy.NTLM);
authtypes.add(AuthPolicy.DIGEST);
authtypes.add(AuthPolicy.BASIC);
httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
authtypes);
httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
authtypes);
}
localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
HttpResponse response = httpclient.execute(httpget, localContext);
System.out.println("Response code: " + response.getStatusLine());
Единственное, что я заметил в Fiddler, это то, что хэши, отправленные Firefox и HttpClient, отличаются, заставляя меня думать, что, возможно, IIS 7.5 ожидает более сильного хеширования, чем обеспечивает HttpClient? Есть идеи? Было бы здорово, если бы я мог убедиться, что это работает с NTLM. Дайджест тоже был бы хорош, но я могу жить и без этого, если нужно.