Клиент JAX-WS для встроенной проверки подлинности Windows IIS (NTLM) - PullRequest
1 голос
/ 26 июня 2009

В последнее время я работаю над проектом, который требует создания клиента веб-службы на Java, работающего на движке JAX-WS, для связи с веб-службой .NET, защищенной встроенной аутентификацией Windows (также известной как протокол NTLM)

Я искал в интернете. Это кажется общеизвестной проблемой, но пока ни у кого нет хорошего решения.

Кто-нибудь делал это раньше?

Любое предложение будет оценено.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Мы используем JAX-WS, встроенный в java 6, и запускаем клиент в Windows XP и Windows 2003 Server. Сервер IIS 7 на Windows 2003 Server.

К своему удивлению, я обнаружил, что встроенная аутентификация работает "из коробки". Конфигурация не предоставлена. Я включил ведение журнала трассировки на уровне HTTP и обнаружил, что используется аутентификация NTLM. Не уверен, что это сработает, если будет использоваться только проверка подлинности согласованием и NTLM будет отключен.

Так что, в принципе, ответ: это просто работает.

Для проверки:

package url.auth;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;

public class DownloadUrl {
    public static void main(String[] args) {

        try {
            URL url = new URL("http://myserver/url/that/requires/authentication");
            URLConnection conn = url.openConnection();
            InputStream is = conn.getInputStream();
            Map<String, List<String>> headers = conn.getHeaderFields();
            for(String header : headers.keySet()) {
                System.out.println(header + ": " + headers.get(header));
            }
            System.out.println("");
            System.out.println(IOUtils.toString(is));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 10 августа 2010

из http://jcifs.samba.org/, это показывает, что выпущен jcifs-1.3.1 / исправлен фильтр HTTP NTLM. Означает ли это, что можно без проблем использовать http-фильтр с ntlmV2?

0 голосов
/ 26 июня 2009

Параметры клиента Java HTTP В этом разделе рассказывается об известных реализациях поддержки NTLM с клиентом Java HTTP, чтобы вы могли выбрать реализацию, которая лучше всего соответствует вашим потребностям.

Доступные реализации:

Sun JRE 1.4.2 или выше (бесплатно) - полная поддержка протокола NTLM (LM / NTLM / NTLM V2) только на платформе Windows. Поддерживает все уровни конфигурации NTLM (я бы предположил, я не пробовал). Sun JRE 6 или 5 (только 1.5_08 или выше) (бесплатно) - полная поддержка протокола NTLM (LM / NTLM / NTLM V2) на всех платформах. Поддерживает все уровни конфигурации NTLM (я бы предположил, я не пробовал). Однако на компьютере с Windows предполагается, что вы хотите пройти аутентификацию, используя текущего пользователя. Вы можете обойти это только после сбоя аутентификации. Jakarta (Apache) HTTP Client (бесплатно, лицензия Apache) - Поддержка протокола LM / NTLM (не NTLM V2) на всех платформах Java. Требуется JRE 1.2 или выше. Не совместим с плагинами с классами Java UrlConnection. Отсутствует поддержка OEM-кодирования (как того требуют определенные прокси-серверы). Поддержка NTLM была добавлена ​​довольно давно, и они, похоже, не заинтересованы в ее расширении. Поддерживаются только уровни конфигурации NTLM 0-3. Инновационный HTTP-клиент с поддержкой Luigi Dragone NTLM (бесплатно, LGPL) - статус этого неясен; Мне было трудно заставить его работать надежно, и это программное обеспечение не выпускалось с 2002 года. Оно не совместимо с подключаемым классом Java URLConnection. Вероятно, поддерживает только уровни конфигурации NTLM только 0-3. JCIFS (бесплатно, LGPL) - Plug-совместимая поддержка для LM / NTLM (не NTLM V2) на всех платформах Java. Не ясно, реализована ли OEM-кодировка. Поддерживает конфигурации NTLM только уровней 0-3. Java-клиент Oakland Software Java (не бесплатный) - полная совместимая с подключаемыми модулями поддержка LM / NTLM / NTLMv2 на всех платформах Java JRE версии 1.2 или выше. Поддерживает кодировку Unicode и OEM. Поддерживает все уровни конфигурации NTLM. Если ваша реализация Java 1.4.2 или выше, и вы используете Java на Windows, используйте встроенную поддержку JRE, и все готово. Опционально используйте класс java.net.Authenticator вместе с настройкой некоторых сетевых свойств

Если вы можете изменить машину Windows на уровень конфигурации NTLM менее 4 (чтобы не требовать NTLM V2), и убедитесь, что для параметра Сетевая безопасность: Минимальная сеансовая безопасность для серверов на базе NTLM SSP (включая защищенный RPC) не установлено значение требуется NTLM V2, затем используйте либо HTTP-клиент Jakarta (если вам не нужна совместимость с плагином), либо HTTP-клиент JCIFS, если вы это делаете. Кроме того, если вы обращаетесь к своему HTTP-серверу через прокси-сервер, который поддерживает только OEM-кодировку для NTLM, вы не сможете использовать HTTP-клиент Jakarta (это также верно для JCIFS?).

Обратите внимание, что существует потенциальная совместимость, связанная с недостатком HTTP-клиента JCIFS

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