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

  • Автор темы Автор темы Amos
  • Дата начала Дата начала

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: ?? Помогите плззз!
Спасибо!
 
Вы это, на экран не пробовали $out печатать?
Там все нормально?
В частности GET и WWW-auth... в разных строчках написаны?
 
Спасибо за замечание... :) исправил... но сервер возвращает тот же результат :(
 
> сервер возвращает тот же результат
Было бы удивительно, если бы сервер умел заниматься предсказанием того, чего же хотел клиент, по ошибочному запросу. Ну неужели нельзя догадаться либо глянуть RFC (сложный путь), либо просто подсмотреть, как это делает браузер и повторить?
 
Спасибо большое :) помогло. Но к сожалению еще не все окончено...
Раньше сервер возвращал ответ 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 всегда разный... как это может быть?

Подскажите, пожалуйста, кто и что об этом думает???
Спасибо :)
 
я тоже думаю, что проблема с параметром responce
я думаю так же, что тебе надо воспользоваться советом simm и при этом разуть глаза.
или, на худой конец, сайтом lingvo.yandex.ru
 
Спасибо за внимание...
я уже вотспользовался советом simm и почитал RFC2617...

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