четверг, 9 сентября 2010 г.

Делаем из Plone 4 сервер CAS

Идея центрального сервиса авторизации (CAS) интересует меня довольно давно - с тех пор как я начал задумываться о том, как сделать удобнее авторизацию пользователей на нашем интернет-портале, состоящем из нескольких сайтов.

Первое что я нашёл - была реализация CAS собственно от авторов этого протокола www.jasig.org. Но т.к. она была на Java, то особо не прижилась - побаловался и забыл. Впоследствии я нашёл реализацию для Ruby, но по тем же причинам она меня тоже не устроила.
Пару недель назад, когда вышел релиз Plone 4, я решил всерьёз заняться его изучением. Просматривая имеющиеся в "сырной лавке" для него пакеты я, к своей радости, обнаружил там два пакета реализующих сервер (anz.cas) и клиент (anz.casclient) CAS для Plone.
Детально описывать как их устанавливать и настраивать я не буду - это достаточно хорошо описано в их документации. Расскажу только об особенностях для Plone 4.

Итак, первое с чем будут сложности - это установка. Хоть в документации к пакетам и написано, что версии зависимостей должны быть равны или больше нужной, но на самом деле в пакете указанно точное соответствие версий.
Лечить это можно двумя способами:
- форкнуть пакеты и поменять требования к версиям в файле setup.py;
- найти установленные egg`s "anz.cas" и "anz.casclient" и поменять тоже самое в мета-данных яйца и повторно запустить билдаут Plone-проекта.

Вторая проблема проявляется в том, что сервер CAS не желает делать редирект обратно на клиента после авторизации пользователя. Как оказалось дело в реализации метода "login_next" формы входа стандартного плоновского скина. Этот скрипт получает из формы адрес возврата (came_from) и проверяет не является ли он страницей входа, выхода и др., которые могли бы вызвать зацикливание редиректов. В этом списке "плохих" страниц в том числе есть и страница "login". Она собственно и является той самой страницей сервера CAS, куда мы должны перейти после авторизации, что бы он смог создать тикет и вернуть нас обратно на сайт клиент.
Несложной манипуляцией через ZMI, выполняется создание custom версии скрипта login_next, в котором убирается из списка "плохих" страниц - "login". После этого редирект срабатывает нормально.

К сожалению автором этих пакетов является какая то японская (или китайская) контора и куда отправлять патчи и запросы на исправление совершено непонятно. Поэтому я решил форкнуть их на bitbucket.org и хотя бы исправить косяк с версиями, т.к. пока не силён в Plone, что бы исправить косяк с "login" на уровне пакета сервера.

UPDATE 2011-07-18:
В версии 1.0.1 anz.cas исправили проблему с редиректом на страницу login и сделали полную поддержку Plone 4.

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

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