我有一个 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[] 数组。
答案2
当我将以下行与 mod_authz_ldap 一起使用时,它会将 uid 和 memberof 变量传递给 PHP:
AuthLDAPURL "ldaps://<server>/cn=users,cn=accounts,dc=ipa,dc=domain,dc=tld?uid,memberof?one?"