Как обеспечить аутентификацию NTLM при вызове любого URL? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть размещенный URL, который аутентифицируется с помощью ntlm (встроенная аутентификация Windows).Я нахожусь на окнах и использую java 1.8

URL url = new URL("someUrl");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// con.setInstanceFollowRedirects(false);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestMethod("GET");
 int responseCode = con.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
            // read response
            ...
            in.close();
            }else{
            System.out.println("Error while fetching reponse, recieved response code " + responseCode);
            }

Приведенный выше код работал до java 1.8.0_181. С последующими обновлениями он начинал давать сбой, я проверил с 191 и 201. Код все еще работает, если перенесен на181. Я также пытался использовать Authenticator, но он не вызывался (не уверен, почему). При внутренней регистрации в java я мог видеть следующее сообщение в журналах «NegotiateAuthentication: java.io.IOException: Поддержка согласования не инициирована» И я получаю 401

Я ожидаю, что любой механизм поможет java самостоятельно договориться об аутентификации.

1 Ответ

0 голосов
/ 11 февраля 2019

В примечаниях к выпуску Java нигде не упоминается, но есть изменения в реализации аутентификации NTLM.Я отладил код Java и пришел к следующему В java.home / lib есть файл net.properties, который теперь упоминает следующее

#
# Transparent NTLM HTTP authentication mode on Windows. Transparent authentication
# can be used for the NTLM scheme, where the security credentials based on the
# currently logged in user's name and password can be obtained directly from the
# operating system, without prompting the user. This property has three possible
# values which regulate the behavior as shown below. Other unrecognized values
# are handled the same as 'disabled'. Note, that NTLM is not considered to be a
# strongly secure authentication scheme and care should be taken before enabling
# this mechanism.
#
# Transparent authentication never used.
#jdk.http.ntlm.transparentAuth=disabled
#
# Enabled for all hosts.
#jdk.http.ntlm.transparentAuth=allHosts
#
# Enabled for hosts that are trusted in Windows Internet settings
#jdk.http.ntlm.transparentAuth=trustedHosts
#
jdk.http.ntlm.transparentAuth=disabled

До jdk1.8.0_181 был обратный вызов аутентификации NTLM по умолчанию, который был полезенв процессе аутентификации NTLM.

Чтобы запустить приведенный выше код с jdk1.8.0_181 и далее, все, что вам нужно, это установить jdk.http.ntlm.transparentAuth для вашего процесса Java.

Если вывыберите trustHosts , убедитесь, что URL-адрес добавлен в доверенный сайт Windows.

...