Можно использовать часть 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>
Помогите?
Вы можете попробовать добавить фильтр к параметру AuthLDAPURL: https://httpd.apache.org/docs/2.4/en/mod/mod_authnz_ldap.html#authldapurl
Может что-то вроде:
AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid?sub?(memberof=cn=%{project_name},ou=groups,dc=test)"
Я считаю, что Apache 2.4 может предложить больше в этой области, чем 2.2 ... возможно, стоит посмотреть.
В качестве альтернативы, возможно, стоит подумать о создании собственного настраиваемого модуля; это не так страшно, как кажется - если вам комфортно в C.
Точно так же, разве mod_perl не предлагает много возможностей для расширения Apache с помощью хуков?