Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2009-09-29

Авторизация в Zope через Apache

English.
Целое дело, это сделать так, чтобы зопа (плон) понимал, что на сайт лезет авторизованный пользователь, если он авторизовался в апаче. И тут я попал в засаду. Закончу разборки, расскажу.

Это я вчера написал.
Пацан сказал, пацан сделал. Рассказываю.

Засада была в том, что Plone то опознавал пользователя, то нет. В зависимости от раздела сайта. А надо, чтобы после успешного логона в Apache, плон видел, что вот, пользователь имярек тута. На любой странице сайта.

Для понятности, небольшая предыстория. Все знают, что Apache это крутейный веб-сервер. Все знают, что Plone это крутейная CMS построенная на крутейном сервере приложений Zope. Ежу понятно, что хорошо сделать в проекте фронт-энд и бэк-энд. Фрон-энд это будет апач, бэк-енд это будет плон. И все бы хорошо, да надо на сайте сделать раздел, доступный не всем подряд, а только авторизованным пользователям. И вот тут начинаются трудности.
Вернее, трудности начинаются с принятия решения, что авторизацией будет заведовать апач. А это надо для сведения в точку вопросов авторизации. Ведь, признацца, плон не единственный бэк-енд в проекте. Есть и другие подсистемы.
Короче, апач замечательно авторизует пользователей а плон не менее замечательно любого пользователя трактует как анонимуса. Потому как нет стандартного решения передать в плон сведения о пользователе, авторизованном в апаче.

Но есть добрые люди. Они написали инструкцию, как подобную задачу решать в среде виндового домена. Главное в этом рецепте - использование RUF, RemoteUserFolder зопы. Что такое UserFolder, смотрите в доке, а кратко - это обьект зопы определяющий пользователей и группы.
Я сделал по инструкции, но мой конфиг имеет мощное отличие - закрытый раздел - это только один раздел из многих. Другие разделы открыты. А это приводит к тому, что в открытых разделах апач не генерирует среду из которой потом вынимается логин пользователя. А надо. Потому как пользователю непонятно: "вот я залогинился, входя в закрытый раздел, вот его видно. А вот я ушел на другую страницу и доступные мне материалы (ранее закрытые) пропали". Я уж не говорю про бодягу с поиском. Когда то анонимусу через поиск доступны закрытые материалы, то авторизованному хрен чего найдешь в закрытых разделах.

Что делать? Известно что, самому все написать. Ну не все, пару патчей.

Итак, решение моей проблемы состоит из двух частей: кусок конфига апача, в котором в плон передается заголовок HTTP с данными авторизации (копируется из апачевского заголовка); и куска кода для RUF, который дополняет стандартный механизм использования REMOTE_USER самописным механизмом использования нестандартного заголовка, переданного из апача.

После чего остается только в управляторе зопы (ZMI) правильно расставить галочки для вкладки Security нужных папок и страниц плона. Где анонимусам смотреть нельзя, там, без прохождения авторизации в апаче, юзер ничего и не увидит. А пройдя авторизацию (в апаче, да) автоматически получит доступ к этим закрытым материалам.

А поскольку данные авторизации передаются через заголовки HTTP, нет нужды использовать FastCGI (он нужен был в примере для передачи переменных среды процесса). Реврайты и проксирование рулят, что и отмечено в апачевом конфиге. Даже жаль. Тема FastCGI меня всегда интересовала. Ну, значит, не судьба.

Модифицированный RUF, с приложенным примером конфига апача.

Патч к RUF


Кусок конфига апача



Сцылки дня:

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) Klaipeda (13) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)