Автор Тема: Повторная аутентификация  (Прочитано 18246 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« : 15 Марта 2002, 22:10:45 »
Ситуация следующая:
- пользователь успешно авторизовался;
- через какое-то время при определенных условиях процедуру аутентификации необходимо повторить.

Делаю так:
print "Status: 401\\n";
print qq|WWW-Authenticate: BASIC realm="... ..."\\n\\n|;

Далее, если аутентификация проходит успешно, то все нормально работает.
А если нет (достаточно нажать кнопку "Отмена" в окне аутентификации), то получаю пустую страницу; далее достаточно обновить страницу - и все содержимое на месте. При этом в access-логе код ответа - 401, а "ErrorDocument 401 ..." не отрабатывает. :confused:

В общем, подскажите, как это правильно делать?:insane:
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Кстати,
« Ответ #1 : 15 Марта 2002, 22:12:39 »
аутентификация и авторизация - это синонимы?
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #2 : 15 Марта 2002, 22:49:20 »
для того, чтобы вызвать аутентификацию, нужно вторично послать:
WWW-Authenticate: Basic realm="Test Authentication System"
HTTP/1.0 401 Unauthorized
идет страничка по то, что как не хорошо вводить не верные пароли или просто поздравить пользователя с нажатием на отмену.


тогда кэш броузера с паролем обнуляться и вторичный заход на защищенную область вызовет повторный запрос логина/пароля.
с уважением,
магистр белой магии.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #3 : 15 Марта 2002, 23:36:26 »
Так я вроде это и посылаю, в чем разница то?
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #4 : 16 Марта 2002, 00:14:46 »
Кэш броузера принудительно очищай при каждой загрузке страницы.
AS IS...

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #5 : 16 Марта 2002, 00:27:37 »
YA
посмотри за заголовки http, которые отдает скрипт броузеру.

ThE0ReTiC
если все правильно с http, то броузер сам должен очищаться.
с уважением,
магистр белой магии.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #6 : 16 Марта 2002, 00:31:55 »
Dm
Неправда ваша дяденька. IE все сохраняет, зараза.
AS IS...

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #7 : 16 Марта 2002, 01:36:46 »
Как последний параноик :) везде прописал:




Введение неправильного пароля почти ВСЕГДА вызывает нормальльную обработку 401 ошибки, НО после этого ИНОГДА удается вернуться кнопкой back.
Если вместо ввода пароля жать отмену, то ПОЧТИ ВСЕГДА получаю пустую страницу, а последующее обновление страницы выдает то, что должно быть уже недоступным.

Так что, похоже, дело все-таки в кэшировании.
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #8 : 16 Марта 2002, 02:27:49 »
одну минутку. мы говорим о аутентификацию через 401 http.
если броузер получает заголовок с 401 статусом, у пользователя запрашивает пароль.
После нажатия на "Ok" он повторяет запрос плюс посылает в заголовках введенные логин/пароль.
Если ответ 200, он продолжает для данной области посылать эту же связку логин/пароль. Об этом кэше я и говорю.
Если он опять получает 401 - кэш очищается. Выводится окошко ввода пароля.
Если нажать на "отмену", кэш чистый, броузер дальше ничего не посылает. Выводит страничку, которая идет после заголовка 401.

Цитировать
ПОЧТИ ВСЕГДА получаю пустую страницу

все верно, у тебя ничего не выдается после заголовков.
и как это почти? ;)
с уважением,
магистр белой магии.

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #9 : 16 Марта 2002, 02:31:53 »
ThE0ReTiC
про IE и кэш страничек в нем - отдельный разговор.
На него действуют только связка http header + meta tag.

Еще иногда в нем - ctrl+f5 (обновить с очисткой кэша).
Кстати, 6-ая версия меньше глючит, чем 5-ая.

вот lynx..... =)
с уважением,
магистр белой магии.

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #10 : 16 Марта 2002, 12:37:28 »
Цитировать
как это почти?


IE 6.0 (которая меньше глючит :) ). Сам ничего непонимаю :( но происходит все именно так.

Попробую на конкретном примере:
- сейчас проверяю только локально на винде;
- весь кэш броузера очистил;
- во всех заголовках:
Cache-Control: Private
Pragma: no-cache
;
- все страницы с мета-тэгами:


(хотя "Privat" нигде требоваться вроде и не должен);
- первичная аутентификация - никаких аномалий;
- перехожу на страницу, которая требует повторной аутентификации;
- скрипт посылает запрос на вторичную аутентификацию:
print "Cache-Control: Private\\n";
print "Pragma: no-cache\\n";
print "Status: 401\\n";
print qq|WWW-Authenticate: BASIC realm="...\\n\\n|; exit;

- броузер просит пароль;
- жму отмену;
- получаю пустую страницу;
- нажимаю "Обновить";
- и... можно работать дальше :( (теперь так ВСЕГДА, а не ИНОГДА :) )

Вот access-log, соответствующий этой сессии (мусор выкинул):
127.0.0.6 - - [16/Mar/2002:12:14:25 +0300] "GET /... HTTP/1.1" 401 956
127.0.0.6 - root [16/Mar/2002:12:14:31 +0300] "GET /... HTTP/1.1" 200 10562
# завершена первичная аутентификация
127.0.0.6 - root [16/Mar/2002:12:14:53 +0300] "GET /... HTTP/1.1" 401 5 # запрос на вторичную
# жму отмену - броузер действительно ничего не посылает
# жму обновить...
127.0.0.6 - - [16/Mar/2002:12:16:25 +0300] "GET /... HTTP/1.1" 401 956 # сервер посылет куда подальше
127.0.0.6 - root [16/Mar/2002:12:16:25 +0300] "GET /... HTTP/1.1" 200 2193 # броузер посылает второй запрос, но уже с логином и паролем из кэша

Ну и как теперь бороться с IE?
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #11 : 16 Марта 2002, 14:13:38 »
Цитировать
вот lynx..... =)

Это да... =)
AS IS...

Оффлайн YA

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 597
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #12 : 16 Марта 2002, 16:01:42 »
ThE0ReTiC
Боюсь, что на IE забить все равно не удасться :)
Литературный перевод с русского и английского на Perl. Дорого!

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #13 : 16 Марта 2002, 17:42:47 »
YA
что-то у меня есть подозрения, что у тебя не корректно выдается страничка с аутентификацией.
вот пример на php (будет работать только на php_mod):

<?php
 
if (!isset($PHP_AUTH_USER)) {
   
header("WWW-Authenticate: Basic realm=\\"My Realm\\"");
   
header("HTTP/1.0 401 Unauthorized");
   echo 
"Text to send if user hits Cancel button\\n";
   exit;
 } else {
   echo 
"<p>Hello $PHP_AUTH_USER.</p>";
   echo 
"<p>You entered $PHP_AUTH_PW as your password.</p>";
 }
?>
с уважением,
магистр белой магии.

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повторная аутентификация
« Ответ #14 : 16 Марта 2002, 17:44:21 »
ThE0ReTiC & YA
да... IE vs lynx!!!! %)
с уважением,
магистр белой магии.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28