Может ли apache предоставить группу ldap, используемую для аутентификации в приложении php?
У меня есть настройки сервера LAMP с использованием Apache2, mod_php и mod_authnz_ldap для аутентификации в Active Directory. Здесь размещается легковесное приложение php, где пользователи вводят данные и манипулируют ими. Доступ основан на директивах require ldap-group ..., и допустимо несколько групп.
Теперь нам нужно добавить доступ для дополнительной группы, но их доступ должен быть "только для чтения". В этом случае нам необходимо определить на уровне приложения, в какую группу входит пользователь, и отключить определенные функции на основе членства в этой группе. Приложение - php, так что php может легко получить к нему доступ.
Идеальное решение:
Имя группы AD, которое Apache использовал для предоставления доступа, может быть легко доступно приложению, подобно тому, как $_SERVER['AUTHENTICATE_SAMACCOUNTNAME']
является.
Решения, которых я бы хотел избежать:
1. Доступ к ldap через модуль php
Мы уже выполняем аутентификацию через Apache, поэтому это создает ненужное дублирование, дополнительную работу для реализации и дополнительные накладные расходы на обслуживание (еще один связывающий URL-адрес для изменения). Выполнимо, но это боль.
2. Изменение AuthLDAPURL
Опять же, требует, чтобы мы отклонялись от наших стандартов только для этого хоста и поддерживали его в будущем. Выполнимо, но немного меньше боли. Однако добавить другие директивы ldap или изменения vhost было бы тривиально.
3. Добавление дубликата Vhost с более ограниченным доступом
На самом деле это кажется лучшей идеей, однако для этого потребуется опубликовать новый URL-адрес для новой группы, что является плохим пользовательским интерфейсом и может быть отклонено.
4. Аутентификация на основе SQL
Так много лишних накладных расходов, что в этом случае это совершенно нецелесообразно. (И технически не ответил бы на вопрос так или иначе).
1 ответ
Вы должны иметь возможность просто использовать SetEnv в apache: https://httpd.apache.org/docs/2.2/env.html
Затем в PHP используйте getenv() или массив $_SERVER[].
Когда я использую следующую строку с mod_authz_ldap, она передает переменные uid и memberof в PHP:
AuthLDAPURL "ldaps://<server>/cn=users,cn=accounts,dc=ipa,dc=domain,dc=tld?uid,memberof?one?"