Доступ к веб-службе Dynamics NAV с помощью Java

Я пытаюсь получить доступ к веб-службе Dynamics NAV 2013 R2 с Java. Веб-служба работает, и когда я ввожу URL-адрес в Internet Explorer, я вижу WSDL, но сначала мне предлагается ввести имя пользователя и пароль. На Wireshark я вижу, что он использует аутентификацию на основе NTLM. До сих пор мне удалось открыть WSDL только из Internet Explorer, когда я открываю его в Firefox, он дает мне пустую страницу и никаких ошибок.

Я пытаюсь получить доступ к веб-службе из Java с помощью инструмента wsimport, но не могу пройти аутентификацию. Я уже создал папку в ~/.metro/auth и поместил туда следующую строку:

http://userfoobar:[email protected]:7047//DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization

и я пытаюсь получить доступ к веб-странице с помощью:

wsimport -d generated -s sources http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization

Я всегда получаю ошибку:

[ERROR] Server returned HTTP response code: 401 for URL: http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization,  "http://@192.168.0.170:7047/DynamicsNAV71/WS/CRONUS%20AG/Page/PageWithCapitalization" needs authorization, please provide authorization file with read access at /home/user/.metro/auth or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//<url-path>

Я пробовал это как из Linux, так и из машины с Windows 7, на которой работает веб-сервис NAV. Должен ли я выполнять какие-либо дополнительные настройки в NAV? Есть ли какие-то специальные приемы, чтобы заставить это работать?


person lanoxx    schedule 21.02.2014    source источник


Ответы (1)


По умолчанию Nav использует авторизацию Windows Active Directory. Я не уверен, что wsimport делает в java, но учетные данные, указанные в URL-адресе, вряд ли будут работать. Для авторизации с сервером необходимо пройти процедуру согласования или изменить тип авторизации в Nav Server Administration оснастке на сервере (или в конфигурационном файле).

См. здесь о типах учетных данных и здесь описано, как настроить сервер. Также см. полезную запись в блоге Фредди на странице как подключиться к Nav из Java (я считаю, что это все еще актуально, хотя это для Nav 2009).

soapUI может обрабатывать тип авторизации NTLM, поэтому вы можете видеть все запросы и ответы в процессе согласования в его журналах.

person Mak Sim    schedule 22.02.2014
comment
Частичным решением было активировать: Использовать аутентификацию NTLM: Указывает, включена ли аутентификация NTLM для веб-служб. Чтобы требовать аутентификацию Kerberos, отключите этот параметр. Мне по-прежнему не удается импортировать wsdl с помощью wsimport, но теперь я могу получить доступ к веб-службе из Java с помощью класса Authenticator. Пока я просто сохраняю файл wsdl в браузере и импортирую классы из файла. - person lanoxx; 25.02.2014
comment
Обновление: кажется, что в Windows wsimport он может проходить аутентификацию (если активирована опция NTLM) и загружать информацию wsdl, мне даже не нужно было вводить учетные данные. Однако в Linux это не работает. - person lanoxx; 25.02.2014
comment
@lanoxx: Не могли бы вы предоставить пример кода о вашем успехе? Я делаю то же самое с NodeJS и не могу получить доступ к веб-службе NAV SOAP. Не могли бы вы мне помочь? - person Pritam; 29.06.2016
comment
@Pritam, убедитесь, что в консоли администрирования NAV вы включили NTLM Authentication для экземпляра, к которому вы подключаетесь. Затем вам нужно будет выяснить, как выполнить аутентификацию NTLM из NodeJS, я не знаю, как это сделать. В Java есть класс с именем java.net.Authenticator, если он настроен правильно, то аутентификация NTLM будет работать автоматически. - person lanoxx; 29.06.2016
comment
@lanoxx: Спасибо за ваш ответ. да. Я включил NTLM Authentication для экземпляра NAV. Но я не могу пройти через проверку подлинности Windows. Можно ли пройти или даже обойти проверку подлинности Windows? - person Pritam; 30.06.2016
comment
@Pritam Не то, чтобы я знал, я думаю, вам нужно будет встроить аутентификацию NTLM в ваше приложение NodeJS. Но это довольно распространено в Windows, я уверен, что существует какая-то библиотека NTLM для NodeJS, просто попробуйте найти ее в Google. - person lanoxx; 30.06.2016
comment
@lanoxx: еще раз спасибо. Поищу и попробую. - person Pritam; 01.07.2016