apache 可以将用于身份验证的 ldap 组公开给 php 应用程序吗?

apache 可以将用于身份验证的 ldap 组公开给 php 应用程序吗?

我有一个 LAMP 服务器,使用 Apache2、mod_php 和 mod_authnz_ldap 进行 Active Directory 身份验证。它托管一个轻量级 php 应用程序,用户可以在其中输入和操作数据。访问基于“require ldap-group ...”指令,并且有多个组有效。

我们现在需要为其他组添加访问权限,但他们的访问权限必须是“只读”。在这种情况下,我们需要在应用程序级别确定用户属于哪个组,并根据该组成员身份禁用某些功能。该应用程序是 php,因此 php 可以轻松访问的东西是理想的。

理想的解决方案:

apache 用于授予访问权限的 AD 组名可以轻松地暴露给应用程序,类似于如何$_SERVER['AUTHENTICATE_SAMACCOUNTNAME']

我想避免的解决方案:

1.通过php模块访问ldap

我们已经通过 apache 进行身份验证,因此这会产生不必要的重复、额外的实施工作和额外的维护开销(需要更改一个绑定 URL)。可行,但很麻烦。

2.修改AuthLDAPURL

再次强调,这要求我们只针对此主机偏离我们的标准,并保持这种标准。这是可行的,但麻烦程度略小。但是,添加其他 ldap 指令或 vhost 更改则很容易做到。

3. 添加具有更多访问权限的重复 Vhost

这实际上似乎是最好的主意,但是它要求我们为新组发布一个新的 URL,这是一种糟糕的用户体验,并且可能会被断然拒绝。

4.基于SQL的身份验证

额外的开销太多了,对于这种情况来说,这是完全不可行的。(而且从技术上来说,无论如何也无法回答这个问题)。

答案1

您应该能够在 apache 中使用 SetEnv: https://httpd.apache.org/docs/2.2/env.html

然后在 PHP 中使用 getenv() 或 $_SERVER[] 数组。

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

答案2

当我将以下行与 mod_authz_ldap 一起使用时,它会将 uid 和 memberof 变量传递给 PHP:

AuthLDAPURL "ldaps://<server>/cn=users,cn=accounts,dc=ipa,dc=domain,dc=tld?uid,memberof?one?"

相关内容