Digest Auth если php - FastCGI

~AquaZ~

Новичок
Digest Auth если php - FastCGI

Здравствуйте. Взял код Digest аутентификации с php.net, чуть подправил, всё работает на локальном сервере (PHP как модуль), но на хостинге PHP установлен как FastCGI, и переменная $_SERVER['PHP_AUTH_DIGEST'] не записывается. Кто подскажет, какие есть альтернативы?
P.S. Кто любит читать чужой код больше 10-15 строк за раз, вот
PHP:
$users = array('abc' => 'def');

if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Digest realm="Restricted area",qop="auth",nonce="'.uniqid().'",opaque="'.md5('Restricted area').'"');
    die('Access denied.');
}

if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset($users[$data['username']])){
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Digest realm="Restricted area",qop="auth",nonce="'.uniqid().'",opaque="'.md5('Restricted area').'"');
    die('Access denied.');
}

$A1 = md5($data['username'] . ':Restricted area:' . $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){
	header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Digest realm="Restricted area",qop="auth",nonce="'.uniqid().'",opaque="'.md5('Restricted area').'"');
    die('Access denied.');
}

echo 'Your are logged in as: ' . $data['username'];

function http_digest_parse($txt)
{
    // protect against missing data
    $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1);
    $data = array();
    $keys = implode('|', array_keys($needed_parts));

    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;
}
 

~AquaZ~

Новичок
Хм, а что такое lighttpd? У меня также не работает apache_request_headers().
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
~AquaZ~
напиши в саппорт хостеру - пусть пропишут в конфиге чтобы нужные хедеры тебе отправлялись в PHP
мы не знаем какой у тебя там сервер
 

dimagolov

Новичок
~AquaZ~, для начала посмотри var_dump($_SERVER), может все там есть и так...
 

fixxxer

К.О.
Партнер клуба
Значит, написать хостеру, чтобы передавали PHP_AUTH_DIGEST fastcgi-параметрами среды в php. Это решается правкой конфига веб-сервера.
 

MiksIr

miksir@home:~$
Ну скорее тогда HTTP_AUTHORIZATION должны прокинуть

-~{}~ 11.05.10 17:14:

ЗЫ: Почитайте еще тут http://php.net/manual/en/features.http-auth.php
Там есть примеры как вам жить когда появится HTTP_AUTHORIZATION
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
шарашкина контора - их админ просто не в теме
 

~AquaZ~

Новичок
Это там кто-то из вас писал? испацтала :)
Вот только что блин с ними делать? :confused:
Блин, эти дебилы вообще снесли тему... Им бы моск снести... До того, как у них сервы сгорели, всё было норм.
Вот новый. http://hostia.ru/ticket/ticket.php?track=GU9Z1LSYVL
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
похоже, проблема не у них, а у тебя
тебе прямо написали: "не можем - берите деньги, идите к другим"

чего еще ты хочешь?
 

~AquaZ~

Новичок
Они не предлагали забрать лаве

-~{}~ 13.05.10 16:18:

Чуваки, мне один тип оттуда нормально ответил "Напишите что и где Вам нужно изменить в конфиге? Изменим." Кто знает, что именно нужно написать - скажите, пожалуйста! Серв Apache, интерфейс FastCGI.
 

MiksIr

miksir@home:~$
Я знаком с ситуаций с mod_fastcgi только. Там, что бы работала basic авторизация, нужно добавить в определяющую директиву опции -pass-header Authorization -pass-header HTTP_AUTHORIZATION
Если же там mod_fcgid, что скорее всего, то вот эта директива http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidpassheader
 
Сверху