Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Сент. 2011
Помог: 0 раз(а)
|
Здравствуйте.
На сервере не работает внешняя аутентификация Digest, но Basic работает.
Пробовался пример из php.net, и похожие ему на просторах сети.
Пример (Отобразить)CODE ( htmlphp):
скопировать код в буфер обмена
<?php $realm = 'Запретная зона'; //user => password $users = array('admin' => 'mypass', 'guest' => 'guest'); if (empty($_SERVER['PHP_AUTH_DIGEST'])) { header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Digest realm="'.$realm. '",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"'); die('Текст, посылаемый, если пользователь нажал Cancel'); } // анализируем переменную PHP_AUTH_DIGEST if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || !isset($users[$data['username']])) die('Неправильные данные!'); // генерируем корректный ответ $A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]); $A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']); $valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2); if ($data['response'] != $valid_response) die('Неправильные данные!'); // ok, логин и пароль верны echo 'Вы вошли как: ' . $data['username']; // функция разбора заголовка http auth function http_digest_parse($txt) { // защита от отсутствующих данных $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1); preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER); foreach ($matches as $m) { $data[$m[1]] = $m[3] ? $m[3] : $m[4]; unset($needed_parts[$m[1]]); } return $needed_parts ? false : $data; } ?>
Оказалось не в примере дело. Переменная $_SERVER['PHP_AUTH_DIGEST'] просто не заполняется при ответе от клиента и скрипт постоянно выкидывает заголовок запроса. Гуглил на эту тему, в подобных ситуация говорили подключить модуль auth_digest_module. Полез в настройки сервера. В httpd.conf AllowOverride стоит all. Посмотрел в модулях Apache, командой httpd -M, написало, что модуль есть (auth_digest_module (static)). Пропись AuthType Digest в .htaccess в корневом каталоге не дала никаких результатов.
Просьба помочь и обьяснить, почему оно не работает.(Отредактировано автором: 13 Сентября, 2011 - 12:36:09)
|