Java - HttpClient не проходит проверку подлинности с NTLM - PullRequest
0 голосов
/ 26 сентября 2018

Попытка подключиться к ресурсу, защищенному аутентификацией NTLM.При отправке запроса я получаю ответ 401 без проверки подлинности, но httpclient не выполняет проверку подлинности NTLM после этого.

Добавлен Перехватчик, чтобы увидеть сообщение, и он даже не пытается аутентифицировать:

Request:
POST/NAV/xxxxxxxxx
Content-type: text/xml; charset=utf-8
SOAPAction:
Content-Length: 359
Host: xxx.local:7051
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.4 (Java/1.8.0_181)
Accept-Encoding: gzip,deflate


Response:
Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate
Date: Wed, 26 Sep 2018 10:37:56 GMT

Никаких запросов после этого не сделано.

Любые предложения, что здесь может быть не так?

Вот мой код:

NTCredentials credentials = new NTCredentials("testuser", "pass1", null, "stt.local");
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(AuthScope.ANY, credentials);

        ArrayList<String> authPrefs = new ArrayList<String>();
        authPrefs.add(AuthSchemes.NTLM);


        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(30000)
                .setConnectTimeout(30000)
                .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM))
                .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
                .build();


        HttpClient client = HttpClientBuilder.
                create().
                setDefaultCredentialsProvider(credsProvider).
                setDefaultRequestConfig(requestConfig).
                addInterceptorLast(new LoggingRequestInterceptor()).
                addInterceptorLast(new LoggingResponseInterceptor()).
                build();



        HttpPost post = new HttpPost(endpoint); //Provide Request URL


        try {

            StringEntity input = new StringEntity(bodyAsString);
            input.setContentType("text/xml; charset=utf-8");
            post.setEntity(input);

            post.setHeader("Content-type", "text/xml; charset=utf-8");
            post.setHeader("SOAPAction", ""); //Provide Soap action


            org.apache.http.HttpResponse response = client.execute(post);
    }

1 Ответ

0 голосов
/ 26 сентября 2018

Параметры этого конструктора NTCredentials должны иметь отдельное имя пользователя и имя домена.

Параметры:
userName - имя пользователя,Это не должно включать домен для аутентификации.Например: «user» является правильным, тогда как «DOMAIN \ user» не является.
пароль - пароль.
рабочая станция - рабочая станция, с которой исходит запрос на аутентификацию.По сути, имя компьютера для этого компьютера.
домен - домен для аутентификации в.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...