Доступ к веб-службе через PHP с использованием аутентификации пользователя Navision (включен SSL)

Мне нужно получить доступ к веб-службе Navision, которая использует Navision User + SSL. Коннектор, который я использую, основан на PHP.

Я могу подключиться к простому http-доступу и использовать пользователя Windows. Это руководство помогло мне достичь этого Веб-служба Navision PHP, написанная Фредди.

Я все еще использую его, но поигрался с добавлением сертификата в curl/request. Исследовал и прочитал много статей, но я все еще не могу этого достичь.

Теперь я могу получить к нему доступ, используя базовый коннектор php, указанный выше (ссылка), но при извлечении данных я получаю следующую информацию:

... успешно установил расположение проверки сертификата:
* CAfile: /Path/Navision.pem
* SSL-соединение с использованием TLSv1.0 / AES256-SHA
* Сертификат сервера:
...
* Результат проверки SSL-сертификата: невозможно получить сертификат локального эмитента (20), все равно продолжается.
* Аутентификация на сервере с использованием NTLM с пользователем 'user'
POST URL-адрес страницы Navision Имя HTTP/1.1
Авторизация: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
...
Метод: POST
Соединение: Сохранить -Alive
User-Agent: PHP-SOAP-CURL
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:microsoft-dynamics-schemas/page/pda_item_list:ReadMultiple"
...
‹ HTTP/1.1 401 Unauthorized ...

Я использовал сертификат с помощью makecert.exe. У меня есть эти файлы 2 .cer, pvk и .crl. Мы использовали один из файлов .cer, взяли отпечаток, чтобы применить его к экземпляру службы navision. Какой из файлов является правильным для использования коннектором php curl.

Вот мой php-код запроса:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, USERPWD);
curl_setopt($ch, CURLOPT_VERBOSE, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/Navision.pem');

Любая связанная ссылка будет высоко оценена, особенно если я смогу использовать веб-службу Navision с помощью коннектора PHP, получив к ней доступ с помощью пользователя Navision и SSL.

ОБНОВЛЕНИЕ

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

Скорее всего, это связано с моей настройкой Navision или я просто неправильно передаю учетные данные? Я все еще исследую и играю, поэтому в настоящее время я все еще не могу получить данные.


person Kevin Patrick Tan    schedule 06.05.2016    source источник
comment
Какую версию NAV вы используете?   -  person azatoth    schedule 07.05.2016
comment
Привет, Азатот, мы используем NAV 2016, извините за поздний ответ.   -  person Kevin Patrick Tan    schedule 09.05.2016


Ответы (1)


у вас есть два варианта:

  • иметь второй уровень обслуживания, который использует аутентификацию имени пользователя. Это позволит PHP использовать Basic Auth. В этом случае вам понадобится сертификат

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

PHP не является поклонником аутентификации NTLM...

Ваше здоровье

person azatoth    schedule 09.05.2016
comment
Я использовал второй вариант, так как я не технарь Navision. В основном я использовал ключ веб-службы, который находится в поле на странице «Пользователи» в клиенте Navision. Похоже, что он также не может получить доступ к странице. Я пробовал активировать ssl и отключить его. Я также следовал основной концепции коннектора php по ссылке выше. Я пропустил какие-либо шаги? - person Kevin Patrick Tan; 09.05.2016