У меня есть PHP-скрипт, который использует NuSOAP с завиткой, чтобы потреблять веб-службы Exchange. Я работал хорошо, разговаривая с более старой версией обмена, а также с Exchange 2010.Curl, NuSoap, PHP, разговаривающий с ошибкой аутентификации сервера Exchange
Совсем недавно мы обновили ОС на сервере, который обновил множество пакетов. С тех пор код Exchange не работал. Он отлично работает со старым сервером, но вообще не будет разговаривать с сервером Exchange 2010.
Ошибка при возврате «Ошибка аутентификации HTTP».
Я, конечно, проверял тройку, чтобы убедиться, что имена пользователей и пароли верны, а код не изменился, а серверы не изменились, поэтому похоже, что это связано с обновлением программного обеспечения сервера.
Кажется странным, что он все еще работает со старым сервером обмена.
Сообщается, что не проверять сертификаты ssl, поскольку они сами подписываются из-за того, что на данный момент являются тестовыми машинами, поэтому я не думаю, что это ошибка проверки сертификата. Я могу аутентифицировать и просматривать веб-сервис на сервере обмена через браузер, поэтому я знаю, что он по-прежнему активен.
Сервер - это сервер Ubuntu, только что обновленный до 10.04.4.
Это немного код, который работал и находится на прежнем сервере Exchange.
$client = new nusoap_client($webservice_wsdl, true);
$client->setCredentials($exch_user, $exch_pass, 'ntlm');
$client->setUseCURL(true);
$client->useHTTPPersistentConnection();
$client->setCurlOption(CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
$client->setCurlOption(CURLOPT_USERPWD, $exch_user.':'.$exch_pass);
$client->setCurlOption(CURLOPT_SSL_VERIFYPEER, false);
$client->setCurlOption(CURLOPT_SSL_VERIFYHOST, false);
$client->soap_defencoding = 'UTF-8';
$xml = '<FindItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"';
$xml .= ' xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" Traversal="Shallow">';
$xml .= ' <ItemShape>';
$xml .= ' <t:BaseShape>IdOnly</t:BaseShape>';
$xml .= ' <t:AdditionalProperties>';
$xml .= ' <t:FieldURI FieldURI="message:From"/>';
$xml .= ' <t:FieldURI FieldURI="item:Subject"/>';
$xml .= ' <t:FieldURI FieldURI="message:IsRead"/>';
$xml .= ' <t:FieldURI FieldURI="item:DateTimeReceived"/>';
$xml .= ' <t:FieldURI FieldURI="calendar:Start"/>';
$xml .= ' <t:FieldURI FieldURI="calendar:End"/>';
$xml .= ' <t:FieldURI FieldURI="calendar:Location"/>';
$xml .= ' <t:FieldURI FieldURI="task:Status"/>';
$xml .= ' <t:FieldURI FieldURI="task:DueDate"/>';
$xml .= ' </t:AdditionalProperties>';
$xml .= ' </ItemShape>';
$xml .= ' <IndexedPageItemView Offset="'.$position.'" MaxEntriesReturned="5" BasePoint="Beginning"/>';
$xml .= ' <ParentFolderIds>';
$xml .= ' '.$fxml;
$xml .= ' </ParentFolderIds>';
$xml .= '</FindItem>';
$result = $client->call('FindItem', utf8_encode($xml));
Вы уверены, что ваш Exchange настроен на использование аутентификации NTLM? – Kniganapolke
Да, это было до сих пор и не было изменено. Я проверил это. На серверах обмена ничего не изменилось. – Tim
У меня была такая же проблема, Тим. Удалось ли вам разобраться? К счастью, аутентификация, которую мы использовали, также хранила одностороннюю хэшированную и соленую версию имен пользователей и паролей локально, поэтому люди все еще могут аутентифицироваться, но когда люди меняют свои пароли ActiveDirectory, теперь есть разъединение ... Я обнаружил, что когда я используйте следующий код, кажется, что все работает ... но по иронии судьбы, когда я использую класс ООП, созданный из процедурного кода, это не так. http://stackoverflow.com/a/3998859/155421 Если я найду решение, я обязательно вернусь и опубликую свои выводы. – BrendonKoz