Проблема NTLM при подключении к веб-службам NAV из PHP
У меня возникли проблемы с использованием службы SOAP Microsoft Dynamics NAV 2009 из PHP.
PHP работает с сервера Linux, и я использую SoapClient . Вместо URL-адреса я использую XML-файл WSDL, загруженный из браузера.
У меня есть учетные данные пользователя для аутентификации с использованием аутентификации BASIC (те же, которые меня запрашивают при доступе к WSDL из браузера). Администраторы сервиса сообщили мне, что они отключили NTLM следующим образом:
<add key="webServicesUseNTLMAuthentication" value="false"></add>
Но я продолжаю получать следующий ответ от сервера:
HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: NTLM
Date: Tue, 23 May 2023 10:28:59 GMT
Error: SoapFault exception: [HTTP] Unauthorized in myscript.php:40
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://X.X.X...', 'urn:microsoft-d...', 1, 0)
#1 myscript.php(40): SoapClient->__soapCall('myFunction', Array)
Это упрощенный код, который я использую:
<?php
$wsdlPath = 'downloaded.xml';
$context = stream_context_create([
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$soapOptions = array(
'authentication' => SOAP_AUTHENTICATION_BASIC,
'login' => 'XXXXX',
'password' => 'XXXXX',
'trace' => 1,
"stream_context" => $context,
'soap_version' => SOAP_1_1,
'connection_timeout' => 120,
'cache_wsdl' => WSDL_CACHE_NONE
);
// create a new SoapClient object and set the endpoint URL and options
$soapClient = new SoapClient($wsdlPath, $soapOptions);
// set the SOAP request parameters as an associative array
$requestParams = array(
'generic_param_0' => 'X',
'generic_param_1' => 'Y',
'generic_param_2' => "Z"
);
try {
$response = $soapClient->__soapCall("myFunction", array($requestParams));
echo $response;
} catch (SoapFault $e) {
$response1 = $soapClient->__getLastResponseHeaders();
echo $response1 . "\n";;
echo 'Error: ' . $e;
}
?>
Я не знаю, что происходит. Кажется, есть еще один уровень аутентификации. Кто-нибудь смог подключиться к Nav Web с PHP? Заранее спасибо.
1 ответ
Невозможно войти в Nav 2009 с использованием базовой аутентификации. Это либо NTLM, либо Kerberos, либо что-то еще. Если они отключили ntlm, это не значит, что вы можете использовать базовую аутентификацию. Вы не можете. Ни за что. Для Nav доступны только механизмы аутентификации Windows.