Динамическая аутентификация Apache с LDAP на основе строки запроса?

Можно использовать часть URI запроса в качестве входа в mod_authnz_ldap Require ldap-group Директива?

Я пытаюсь динамически проверить доступ к множеству различных каталогов проектов, все по http://testserver.com/projects/, так что пользователь получает доступ /projects/abc будет проверен на членство в cn=abc,ou=groups,dc=test, В идеале я хотел бы сделать это, не создавая отдельную директиву Location для каждого проекта, поскольку их вполне может быть сотни.

Я придумал это, которое иллюстрирует общую концепцию, но не работает (имя_проекта не получает фактическое содержимое переменной):

<Location /projects>
    SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1

    AuthType Basic
    AuthBasicProvider ldap
    AuthName "Restricted Resource - SVN (LDAP)"
    AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid"
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute memberUid
    Require ldap-group cn=%{project_name},ou=groups,dc=test
</Location>

Помогите?

3 ответа

В Apache 2.4.8 и более поздних версиях это теперь возможно:

      SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1
Require ldap-group cn=%{env:project_name}, ou=groups, dc=test

Обратите внимание, что пробелы вRequireможет потребоваться директива. См. документацию mod_authnz_ldap , особенно пример 5.

Спасибо Бури за то, что он нашел ответ на этот старый вопрос в авторизации ldap Apache2 с динамическим именем группы на основе имени сервера .

Я считаю, что Apache 2.4 может предложить больше в этой области, чем 2.2... возможно, стоит взглянуть.

В качестве альтернативы, возможно, стоит взглянуть на создание собственного пользовательского модуля; это не так страшно, как кажется - если вы чувствуете себя комфортно в C.

Точно так же, разве mod_perl не предлагает много возможностей для расширения Apache с помощью хуков?

Вы можете попробовать добавить фильтр в параметр AuthLDAPURL: https://httpd.apache.org/docs/2.4/en/mod/mod_authnz_ldap.html

Может быть что-то вроде:

AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid?sub?(memberof=cn=%{project_name},ou=groups,dc=test)"
Другие вопросы по тегам