2016-08-25 11 views
0

Я пытаюсь получить некоторые данные из Microsoft Dynamics Nav WebService. Эта служба использует аутентификацию NTML.Запрос на завивание с аутентификацией ntlm завершается с ошибкой, если установлен пароль

Если я открою URL-адрес webservice в браузере и использую данные учетные данные, все будет работать нормально.

Для настройки среды для клиента WebService я использовал командную строку, чтобы проверить, все ли работает нормально, в какой-то момент я не смог выполнить аутентификацию.

То команду я использую:

curl --ntlm -u "DOMAIN\USERNAME" -k -v "http://hostname:port/instance/Odata/Company('CompanyName')/Customer" 

Команда будет запрашивать пароль. Я копирую пароль, и все в порядке.

Но когда я использую эту команду, с паролем уже включенным, он перестает работать, и аутентификация завершается неудачно:

curl --ntlm -u "DOMAIN\USERNAME:PASSWORD" -k -v "http://hostname:port/instance/Odata/Company('CompanyName')/Customer" 

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

Очень сложно исследовать этот вопрос. Поиск проблем с проверкой curl + ntlm дает много результатов, но ничто не связано с этой конкретной проблемой.

Кто-нибудь из вас, ребята, уже имел опыт в этом вопросе?

ответ

0

У меня возникла проблема с аутентификацией из-за куки-файлов. Я решил использовать файлы cookie в txt-файле и использовать именно этот файл через все запросы. Например, после запроса авторизации я сохранил это печенье:

curl -X POST -u username:password https://mysite/login -c cookies.txt 

И следующий запрос я использовал этот файл так:

curl -X POST -u username:password https://mysite/link -b cookies.txt 

Это решение работает для меня, я, если ваша проблема не знаю похоже, но, я думаю, вы можете попробовать это.

+0

Возможно, проблема, о которой я говорю, немного слаба, но проблема не в том, что второй запрос требует другой аутентификации. Моя проблема заключается в том, что как только я помещаю пароль в первоначальный запрос, аутентификация завершается с ошибкой. – sbonath

0

Я долгое время боролся с подобной проблемой, и, наконец, я нашел этот отчет об ошибке curl #1253 NTLM authentication fails when password contains special characters (british pound symbol £).

Проверка подлинности NTLM в cURL поддерживает только символы ASCII в паролях! Это все еще имеет место в версии 7.50.1 на Ubuntu, но я тестировал это на разных дистрибутивах, и это всегда одно и то же. Эта ошибка также нарушит curl_init() в PHP (проверена на PHP7). Единственный способ решить это - избегать символов без ASCII в паролях аутентификации NTLM.

Если вы используете Python, тогда вам повезет. По-видимому, разработчики Python переписали реализацию cURL и работают с символами без ASCII, если вы используете пакет HttpNtlmAuth.