|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Victor Wagner 2:5020/400 25 Sep 2002 15:18:26 To : "Michael A. Ivanovsky" Subject : Re: Аутентификация средствами HTTP -------------------------------------------------------------------------------- Michael A. Ivanovsky <iv@amrita.penza.com.ru> wrote: >> MAI> хттп-заголовка >> MAI> WWW-Authenticate: Basic realm="MuRealm" >> MAI> HTTP/1.0 401 Unauthorized >> >> зачтения документации отослать к "Writing Apache modules with Perl and C". MAI> Спасибо. В документации я не обнаружил ни одного внятного примера, тем MAI> более связанного с 401-й ошибкой. Оно там есть. MAI> Я предполагал, что алгоритм такой. MAI> - клиент лезет на скрипт MAI> - действие, которое он хочет сделать, требует авторизации MAI> - генерится ошибка 401, которая вынуждает клиент показать окно ввода пароля MAI> - если пользователь нажал "отмена" он увидит текст, который идёт за хидером MAI> с 401-й ошибкой MAI> - если логин/пароль введён - передаётся в заголовке ответа клиента MAI> - логин/пароль проверяется по данным СУБД мускл. Такая схема прекрасно работала в Communiware на протяжении 3-х лет, пока не пришел в компанию Артем Чуприна и не переделал все нафиг на куках (стало работать еще прекраснее). Hо! Тонкость заключается в том, что Communiware это не сgi-скрипт, а набор mod_perl-овых модулей. Поэтому у меня была возможность залезть в заголовок Authorization и достать аттуда пароль, дабы проверить его самому. CGI-скрипту Apache пароля не отдаст. Поэтому авторизацию надо проводить либо средствами апача, либо посредством собственного модуля (например перлового, черед mod_perl) встроенного в апач. Потому что апач и стандартные авторизационные модули типа mod_auth_mysql, не будут проверять авторизацию для URL, про которую в конфиге апача не написано AuthType basic. Есть такой метод обхода этой проблемы (и я им активно пользовался еще году в 1997): увидев, что необходима авторизация, скрипт выдает РЕДИРЕКТ на $cgi->url(-query_string=>0) . "/secure" В конфиге апача написано <Location /cgi-bin/myscript/secure> AuthType basic и все что касается того по чему проверять пароли В начале работы скрипт смотрит на path_info, и если там /secure, то убеждается в наличии $ENV{'REMOTE_USER'}. После чего уже сам скрипт может решать, заслуживает ли данный юзер 200 или 403. -- http://www.communiware.ru http://www.ice.ru/~vitus --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/1517845ea93cc.html, оценка из 5, голосов 10
|