Подключаемая (Настраиваемая) Служба аутентификации Plone

В статье «Pluggable Authentication Service» приведен технический взгляд на одну из самых больших особенностей Plone, для решения корпоративных задач - систему аутентификации Plone. Автор: Matt Hamilton

Это технический взгляд на одну из самых больших особенностей Plone, описанную в статье Plone in the Enterprise: Two Killer Features ( здесь перевод на русский ). Если Вы хотите больше узнать о преимуществах Plone на высоком уровне, прочитайте предыдущую статью, если же хотите знать всё о винтиках и болтиках - продолжайте чтение...

Подключаемая служба аутентификации (Pluggable Authentication Service - PAS) позволяет разделить процесс проверки подлинности на небольшие этапы и иметь индивидуальные плагины для каждого этапа.

Подключаемая система аутентификации Zope (Zope’s Pluggable Authentication Service)

Но как это работает в реальности? Допустим, у нас есть клиент, и мы развиваем интранет, для которого требуется NTLM аутентификация. NTLM - это весьма сложный механизм запроса/ответа, но он позволяет пользователям Windows прозрачно войти на Web-сервер, используя учетную запись, которую они получили при входе на свою рабочую станцию. Нам было необходимо написать для этого плагин, так как для Plone не было ни одного плагина (к тому же, мы уже использовали NTLM много лет назад, поэтому знали, как он работает).

Плагин NTLM отвечал за запрос к web-браузеру, чтобы тот использовал NTLM (ChallengePlugin); извлечение учетной записи  пользователя (ExtractionPlugin); и аутентифицированный в данный момент пользователь (AuthenticationPlugin). Таким образом, это позволяет пользователю аутентифицироваться, но все, что мы знаем - это имена пользователей (В этой компании это просто случайное число). Нам необходимо получить больше информации о них: их реальные имена и адреса электронной почты. Но существует дополнительный  плагин PAS (LDAPMultiPlugin), который может получить это для меня. Я могу настроить плагин LDAP, для поиска информации из Active Directory: имя пользователя и адрес электронной почты (PropertiesPlugin); Поиск/Список всех пользователей в компании (UserEnumerationPlugin). Я могу также использовать один и тот же плагин, чтобы узнать, членом какой группы является пользователь (GroupsPlugin).

Таким образом, мы подтверждаем подлинность пользователя через один источник и затем ищем дополнительную информацию о пользователе и их группах из другого источника. Однако, мы хотим, чтобы пользователям присвоили роли в интранете. Эта информация только для определенной сети интранет, и таким образом, пока может храниться в LDAP, она вероятно, не имеет большого значения, и возможно мы должны хранить ее локально. Это не проблема, поскольку Plone поставляется вместе с плагином ZODBRoleManager, который сохраняет роли локально.

Можно даже считать это шагом вперед: как ясно из вышеизложенного, каждый запрос на Web-сервер вызывает поиск сервера контроллера домена для выполнения NTLM-аутентификации. Plone поставляется с плагином 'session', который использует криптографически подписанный cookie для аутентификации пользователей, которые могут иметь возможность для извлечения учетной записи (ExtractionPlugin) и аутентификации (AuthenticationPlugin). Теперь у нас есть два отдельных плагина аутентификации, NTLM и 'session'. Plone будет пытаться использовать их оба для аутентификации пользователя и остановится, как только все пройдет успешно, так что, если мы поместим плагин  'session' наверх списка, то Plone попытается использовать сначала его, а затем, если это не сработает (то есть это первое посещение пользователя сайта в этот день), то он попытается использовать плагин NTLM.

По материалам www.netsight.co.uk ( Matt Hamilton )

Перевод ООО «Комтет» komtet.ru

Вам также может помочь