Zend - базовая аутентификация в Apache с использованием LDAP - PullRequest
1 голос
/ 08 апреля 2011

Я новичок в Zend и в LDAP, поэтому у меня реальное переполнение стека ... Что у меня есть:

  • LDAP-сервер
  • Apache-сервер
  • Zend-приложение

Что мне нужно:

  • На любой странице приложения, пока пользователь не авторизован, показать приглашение Apache basic-auth
  • Если логин и пароль верны на LDAP-сервере, то перенаправьте на index-controller.

Я прочитал тонны руководств по Zend_Auth, authnz_ldap_module и т. Д., Но не смог решить данную задачу.Любая помощь - примеры, решения, ссылки - будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 02 декабря 2011
AuthType basic                                                                                           
AuthName "Secure Login"                                                                           
AuthBasicProvider ldap                                                                            
AuthLDAPURL "ldaps://ldap.example.com/ou=People,dc=exmaple,dc=com?uid?sub".   

Добавьте это в директиву вашего каталога, это покроет вашу потребность в ldap auth. Но вам все еще нужно будет понять, как перенаправить новичка в индекс, возможно, куки.

0 голосов
/ 09 апреля 2011

Я недавно прошел весь процесс ACL и доволен результатом.Вот что я реализовал:

  1. Расширьте Zend_ACL и используйте его конструктор для добавления ваших ролей (включая отношения наследования).

  2. Создание действияпомощник, который загружается в загрузчик.(Вам нужно загрузить его заранее, чтобы вы могли использовать его перехватчики, такие как preDispatch).

  3. Отредактируйте init() каждого контроллера, который вы хотите защитить, и вызовитеновый помощник ACL, передавая правила, которые вы хотите применить к этому контроллеру, например: allow('member', 'edit);

Реальная работа выполняется помощником действий.Он имеет четыре функции:

  • init() - создает новый класс ACL, а затем добавляет новый ресурс, который отражает имя текущего контроллера,то есть.$this->_resource = $this->getRequest()->getControllerName()).

  • preDispatch() - получает текущий тип пользователя с помощью Zend_Auth (или назначает гостя по умолчанию, когда пользователь не вошел в систему).Проверяет, разрешен ли запрос с использованием ACL,то есть $this->_acl->isAllowed($currentRole, $resource, $action). Обратите внимание , что запрошенное действие становится привилегией ACL.

  • allow() - Это просто прокси до функции allow() объекта ACL.Он вызывается конструктором контроллера для установки правил в ACL.

  • deny() - как для разрешения.

Итак, во время выполненияпоследовательность событий выглядит следующим образом:

  • помощник действий загружен в загрузчик.Это a) создает экземпляр пользовательского объекта ACL, который устанавливает свои собственные роли, затем b) добавляет текущее имя контроллера в качестве ресурса.

  • Controllers init() выполняется.Он вызывает методы помощника allow() и deny() для установки правил.

  • Запуск помощника preDispatch(), и если !isAllowed(), пользователь перенаправляется.

Я выполнял аутентификацию на БД, но та же логика применима, если вы используете LDAP.(Является ли базовая аутентификационная подсказка Apache проблемой по умолчанию в этом случае? Если нет, то это может добавить дополнительные сложности).

Я адаптировал это из книги Роба Аллена (Zend Framework in Action) и других различныхисточники.Обратите внимание, что некоторые профессионалы Zend рекомендуют ACL на основе моделей (не действий контроллера).Я тоже немного подумаю над этим.

Один особенно удобный аспект вышеупомянутого подхода заключается в том, что действительно легко поддерживать правила ACL на постоянной основе.Пока вы работаете с конкретным контроллером, вы устанавливаете его ACL правила в init().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...