HttpClient 4.1.1 возвращает 401 при аутентификации с помощью NTLM, браузеры работают нормально

Я пытаюсь использовать 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. Дайджест тоже был бы хорош, но я могу жить и без этого, если нужно.

11
задан Jesse 10 May 2011 в 20:20
поделиться