Назад | Перейти на главную страницу

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

Так много дополнительных накладных расходов, что в данном случае это совершенно нецелесообразно. (И формально все равно не ответил бы на вопрос).

Вы должны иметь возможность просто использовать 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?"