Проблема с WWW-Authenticate: Digest...

Amos

Новичок
Проблема с WWW-Authenticate: Digest...

Привет всем!!!

Такая вот у меня проблема:
Я конекчусь на сервер через сокеты. Для этого нужно пройти аутентификацию. Но сервер постоянно возвращает результат

HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.0
Date: Fri, 29 Apr 2005 16:03:52 GMT
Content-Type: text/html
Content-Length: 87
The parameter is incorrect.


А вот мой код:
PHP:
$fp = fsockopen($this->url, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
$a1 = "$login:$pass";
$a2 = "GET:$this->rest_login_url";
$auth_nonce = md5(time().":".$this->url);
$auth_opaque = md5($this->url);
$row_digest = md5($a1) . ":" . $auth_nonce . ":" . md5($a2);
$resp = md5($row_digest);

$out = "GET $this->rest_login_url";
$out .= "WWW-Authenticate: Digest username=\"$login \", realm=\"$this->url\", nonce=\"$auth_nonce\", opaque=\"$auth_opaque\", uri=\"$this->rest_login_url\", responce=\"$resp\" \r\n\r\n";
fwrite($fp, $out);

$i=0;
while (!feof($fp)) {
$arr[$i] = fgets($fp, 128);
$i++;
}
fclose($fp);
}
Может кто стыкался уже с таким делом:confused: ?? Помогите плззз!
Спасибо!
 

kruglov

Новичок
Вы это, на экран не пробовали $out печатать?
Там все нормально?
В частности GET и WWW-auth... в разных строчках написаны?
 

Amos

Новичок
Спасибо за замечание... :) исправил... но сервер возвращает тот же результат :(
 

SiMM

Новичок
> сервер возвращает тот же результат
Было бы удивительно, если бы сервер умел заниматься предсказанием того, чего же хотел клиент, по ошибочному запросу. Ну неужели нельзя догадаться либо глянуть RFC (сложный путь), либо просто подсмотреть, как это делает браузер и повторить?
 

Amos

Новичок
что значит "подсмотреть как это делает броузер"???
 

Amos

Новичок
Спасибо большое :) помогло. Но к сожалению еще не все окончено...
Раньше сервер возвращал ответ Bad Request. Теперь запрос нормальный, но в этом случае сервер возвращяет Access Denied, хотя логин и пароль правильные (когда захожу через броузер - пускает).
Так может я еще что-то не так делаю???
Вот так теперь выглядит мой код:
PHP:
$fp = fsockopen($this->url, 80, $errno, $errstr, 30);
if (!$fp) {
	echo "$errstr ($errno)<br />\n";
         } else {
	$a1 = "$this->username:$this->realm:$this->password";
	$a2 = "GET:$this->rest_login_url";
	$row_digest = md5($a1) . ":" . $nonce . ":" . md5($a2);
	$resp = md5($row_digest);

	$out2 = "GET $this->rest_login_url HTTP/1.0\r\n";
 	$out2 .= "Host: $this->url\r\n";
 	$out2 .= "Authorization: Digest username=\"$this->username\", realm=\"$this->realm\", qop=\"auth\", algorithm=\"MD5\", uri=\"$this->rest_login_url\", nonce=\"$nonce\", nc=00000001, opaque=\"$opaque\", response=\"$resp\"\r\n\r\n";
 			
 	fwrite($fp, $out2);
 	$i=0;
 	while (!feof($fp)) {
 		$arr2[$i] = fgets($fp, 128);
 		$i++;
	}
	fclose($fp);
}
Может кто-то видит какую-то ошибку???
Помогите плзз...

-~{}~ 30.04.05 13:48:

Я подозреваю, что проблема с параметром responce. Из той формулы, по которой он вычисляется, ясно что он всегда должен быть неизменным, поскольку username, realm, password и nonce всегда стабильны. У меня оно так и получается... но когда я провожу эту аудентификацию не через скрипт, а просто через броузер и подсматриваю хеадеры, которые пересылаются - то там параметр responce всегда разный... как это может быть?

Подскажите, пожалуйста, кто и что об этом думает???
Спасибо :)
 

Фанат

oncle terrible
Команда форума
я тоже думаю, что проблема с параметром responce
я думаю так же, что тебе надо воспользоваться советом simm и при этом разуть глаза.
или, на худой конец, сайтом lingvo.yandex.ru
 

Amos

Новичок
Спасибо за внимание...
я уже вотспользовался советом simm и почитал RFC2617...

А с responce оказывается все нормально было :)
Просто параметр qop при таком типе паметра responce указывать ненадо. :) Так что все получилось!!!
Большое спасибо всем кто принимал участие :)
 
Сверху