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

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

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

http://userfoobar:passforbar@192.168.0.170: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? Есть ли какие-то специальные приемы, чтобы заставить это работать?

2 ответа

Решение

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

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

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

Вы можете использовать для доступа к NAVвеб-сервис с любого из популярных языков программирования. В этом случае я буду использовать Node.js.

NTLM authentication позволяет клиенту получить доступ к ресурсу на сервере, предоставив учетные данные для учетной записи Windows, которая существует на сервере.

Итак, если на сервере есть пользователь с именем GilbertS с паролем Gilbert1000, вы можете отправить запрос на сервер, запустив следующий код javascript:

      const httpntlm = require('httpntlm');

const NAV_DimQuery = "http://junit:7148/BC140/ODataV4/Company('CronusCompany')/MyDimensionQuery";
httpntlm.get({
    url: NAV_DimQuery,
    username: 'GilbertS',
    password: 'Gilbert100',
    domain: 'JUNIT'
}, function(err, res) {
    if(err) {
        throw err;
    } 
    console.log(res);
});

Установите необходимую библиотеку, введя команду: npm i httpntlm Обратите внимание, что другие языки, такие как PHP и Java, имеют аналогичную библиотеку.

Чтобы получить имя домена, из командной строки или терминала сервера запустите: SET Найдите значение ключа под названием USERDOMAIN. Обратите внимание, что домен можно оставить пустым, если сервером является ПК, а не выделенный Windows Server.

Специальные конфигурации NAV / Business Central

В NAV или Business Central Administration на вкладке «Общие» есть поле с названием «Убедитесь, что он установлен» (для него установлено значение «истина»). Если вы не можете изменить его из окна администрирования NAV / BC, отредактируйте CustomSettings.config файл в пути: C:\Program Files\Microsoft Dynamics 365 Business Central\140\Service.

Поскольку мы используем NTLM для аутентификации, убедитесь, что NAV / BC настроен на использование Windows authentication. Вы делаете это, установив для Windows.

Если Credential Type установлен на что-то другое или вы не ставите галочку Use NTLM Authentication, при отправке запроса вы получите сообщение о том, что сервер не разрешает NTLM.

Наконец, остерегайтесь определенного случая, когда запуск кода заставляет NAV Server останавливаться, я все еще пытаюсь выяснить, что вызывает это.

Вы можете делать запросы в комментариях, если что-то все еще заставляет ваши запросы терпеть неудачу.

Другие вопросы по тегам