Завершение запроса с аутентификацией ntlm не выполняется, если установлен пароль

Я пытаюсь получить некоторые данные из веб-службы Microsoft Dynamics Nav. Этот сервис использует NTML-аутентификацию.

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

Для настройки среды для клиента 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 дает много результатов, но с этим конкретным видом проблем ничего не связано.

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

2 ответа

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

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

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

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

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

Я долго боролся с подобной проблемой и, наконец, обнаружил, что отчет об ошибке скручивания #1253 Проверка подлинности NTLM не выполняется, когда пароль содержит специальные символы (символ британского фунта £).

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

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

Попробуйте с флагом nltm.

Что-то вроде этого:

curl -v --proxy-nltm -u 'username:password' youproxy.com:8080 someURL


from > curl --help

 -x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port
     --proxy-anyauth Pick "any" proxy authentication method (H)
     --proxy-basic   Use Basic authentication on the proxy (H)
     --proxy-digest  Use Digest authentication on the proxy (H)
     --proxy-negotiate Use Negotiate authentication on the proxy (H)
     --proxy-ntlm    Use NTLM authentication on the proxy (H)
Другие вопросы по тегам