Как мне сделать этот пример аутентификации ASP WebDAV FBA в PHP?

Мне нужно, чтобы PHP аутентифицировался на сервере обмена. Как только я смогу успешно подключиться к нему, мне нужно будет написать запросы webdav на PHP, чтобы я мог извлекать данные с сервера обмена и использовать их в веб-приложении.

Это было бы несколько просто, за исключением того, что на сервере Exchange 2003 включена проверка подлинности на основе форм (FBA). С включенным FBA я полагаю, что должен делать то, что говорится в приведенной ниже (см. ссылку) статье в блоге. Моя проблема в том, что мне нужна помощь в преобразовании его инструкций для ASP в PHP.

http://blogs.msdn.com/webdav_101/archive/2008/12/12/webdav-fba-authentication-sample-explained.aspx

Кто-нибудь понимает детали того, что он описывает в этой статье? Любое понимание поможет.

Более конкретная информация, если необходимо: я не понимаю, как настроить запрос POST (я имею в виду, когда вы обычно отправляете данные в форму, разве вы обычно не загружаете страницу, на которую публикуете? В своих инструкциях он говорит POST в /exchweb/bin/auth/owaauth.dll Как это работает?)

Я также не понимаю, как выполнить третий шаг: 3) WebReq.KeepAlive и AllowAutoRedirect должны быть установлены в True по запросу.

Кроме того, мне действительно не помешала бы помощь в описании того, как взять данные сообщения и поместить их в файл cookie в PHP.

Заранее благодарим за любую оказанную помощь!


person Chain    schedule 13.01.2009    source источник


Ответы (3)


Я считаю, что лучший способ сделать это через curl. (http://ca.php.net/curl)

На связанной странице первый пример - хороший класс для использования (я использовал его для автоматического входа на другие веб-сайты)

Он должен иметь KeepAlive (заголовок) и перенаправление по умолчанию (curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);)

Вам нужно убедиться, что веб-служба может создавать/изменять cookie.txt, а затем попробуйте:

$cc = new cURL();
$cc->post('http://www.yourexchange.com','destination=https%3A%2F%2F' . $strServerName . '%2Fexchange%2F' . $strUserName . '%2F&username=' . $strDomain . '%5C' . $strUserName . '&password=' . $strPassword . '&SubmitCreds=Log+On&forcedownlevel=0&trusted=0'); 

Выше приведен краткий перевод информации на странице, на которую вы ссылаетесь, вам может понадобиться использовать urlencode() для ваших переменных, если есть специальные символы. Как только вышеперечисленное успешно работает, вы можете использовать

$page=$cc->get('http://www.yourexchange.com/?whatever=youneed');

Страница $ будет содержать строку, полученную в результате получения (она отправляет файл cookie, хранящийся в текстовом файле по этому запросу), после чего вы можете использовать регулярное выражение, чтобы получить то, что вам нужно.

Это должно приблизить вас к тому, что вам нужно.

person savageguy    schedule 13.01.2009
comment
Привет! Большое спасибо за вашу помощь. Однако я застреваю в точке с файлами cookie. Я настроил первый пример cURL из (ca.php.net/curl). Я играл с другими примерами cURL, и я думаю, что понимаю это более или менее. Однако я продолжаю получать следующую ошибку: (часть 1) - person Chain; 14.01.2009
comment
-------------------- Предупреждение: fopen(cookies.txt) [function.fopen]: не удалось открыть поток: Нет такого файла или каталога в /anesweb/sfghdevelopment/ zcurl/curlclass.php в строке 34 Ошибка cURL Не удалось открыть файл cookie. Убедитесь, что этот каталог имеет правильные разрешения (часть 2) - person Chain; 14.01.2009
comment
------------------------ Я знаю, как запустить файл cookie с помощью php setcookie, но я сбит с толку, когда смотрю на функцию cookie в cURL класс. Кажется, он пытается открыть cookie.txt. Я заранее создал файл cookie.txt с помощью setcookie. (часть 3) - person Chain; 14.01.2009
comment
Я не устанавливаю путь или время или что-то еще, просто простой файл cookie с именем cookie.txt. Я не могу сказать, почему я продолжаю получать предупреждение. Я также создал файл с именем cookie.txt в том же каталоге, что и файлы php. Это тоже не сработало. - person Chain; 14.01.2009
comment
Когда вы говорите, что веб-служба может создавать/изменять cookie.txt, я мог бы использовать более подробную информацию. Я предполагаю создать файл на сервере с именем cookie.txt. Насколько я знаю, файлы cookie живут в браузерах клиентов. Я не понимаю, почему это файл .txt. Это на самом деле не печенье на данный момент. - person Chain; 14.01.2009
comment
fopen должен открыть файл на сервере, верно? Наконец, когда вы говорите веб-сервис, я не уверен, что вы имеете в виду. У меня есть apache, работающий на моем собственном сервере: должен ли я как-то изменить настройки или разрешения для каталога, чтобы разрешить fopen работать с теоретическим файлом в каталоге? - person Chain; 14.01.2009
comment
Спасибо еще раз за помощь! С уважением, werkerbee (хм, я пока явно не понимаю, как отвечать на ответ) - person Chain; 14.01.2009

Похоже, что текстовый файл на самом деле называется «cookies.txt». Вы можете создать пустой текстовый файл с этим именем и загрузить его в тот же каталог. В вашем ftp-клиенте вы должны иметь возможность устанавливать разрешения, я считаю, что 777 — это код разрешения, который вам понадобится. Если вы не можете просто ввести код разрешения, попробуйте установить все флажки, чтобы предоставить все разрешения.

Re: последний пост,

это правильно, когда скрипт запускается, это в основном клиент, а файл cookie — это простой способ хранения cookie для удобного повторного использования.

person savageguy    schedule 14.01.2009

Цепь,

Да, это относится к файлу с именем cookies.txt (примечание: «cookies» с буквой «s») в той же папке, что и ваш файл кода curlclass.php.

cURL использует это для хранения и отправки файлов cookie при последующих запросах. Вы правы в своем предположении, что веб-сервер, на котором запущен PHP-скрипт, действует как клиент; в основном, это вход на сервер Exchange путем имитации POST в форму входа, а затем сохранение файла cookie и отправка его с каждым запросом, как это делает браузер.

Создайте файл cookies.txt и установите разрешения, чтобы пользователь, работающий с вашим экземпляром Apache, мог записывать в файл.

person Michelle Tilley    schedule 05.02.2009