Может ли 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[].

http://php.net/manual/en/function.getenv.php

Когда я использую следующую строку с mod_authz_ldap, она передает переменные uid и memberof в PHP:

AuthLDAPURL "ldaps://<server>/cn=users,cn=accounts,dc=ipa,dc=domain,dc=tld?uid,memberof?one?"
Другие вопросы по тегам