如何在 Apache 站点上实现连续的 LDAP 身份验证?

如何在 Apache 站点上实现连续的 LDAP 身份验证?

我有一个小型 Apache 站点,我已使用 mod_authz_ldap 成功实现了基本 LDAP 身份验证。但是,我在尝试实现两级连续身份验证时遇到了问题。有效用户一旦通过一次身份验证,就不会再被提示进行二次身份验证,而二次身份验证应该是站点特定部分所必需的。也就是说,所有有效用户都可以登录,但当只有这些用户中的一小部分需要访问站点的某些部分时,他们永远不会被重新认证。


例如,我要求访问 example.com 的每个人都被认证为有效 LDAP 用户。然后我在 example.com/websvn 有一个 subversion 存储库,我想将其限制为仅“开发”组(有效用户的子集)。

我的问题是,一旦用户在 example.com 上成功通过身份验证,当他们导航到 example.com/websvn 时,系统便不会再提示他们以“开发”用户身份进行身份验证。即使有效用户确实不在开发组中,也会发生这种情况。我可以通过直接连接到 example.com/websvn 来测试 repo 身份验证,但当我首先在 example.com 上进行身份验证,然后访问 example.com/websvn 时,无论如何我都会被授予访问权限,并且从未提示我输入密码。

我该如何正确实现这样的两阶段身份验证?我希望所有有效用户都能访问主站点,但只有开发用户才能访问 websvn。因此,必须重新验证有效用户以检查他们是否属于开发组。

谢谢!

答案1

Scott 的回答让我走上了正确的道路。最初,我在不同的文件中复制了一些身份验证指令,一个用于主站点,其他用于 gitweb 和 websvn 特定的配置。我从 gitweb 和 websvn 配置中删除了身份验证位,并将所有身份验证内容移至主站点文件中.../apache2/sites-available/example

<VirtualHost *:8080>
  DocumentRoot  /var/www
  ServerName    example.com

  <Location />
    AuthName "example"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPURL ldap://example.com/dc=example,dc=com?uid?sub
        AuthLDAPBindDN "cn=admin,dc=example,dc=com
        Include ldap_password.conf

        Require valid-user
  </Location>

  <Location /gitweb>
    Require ldap-group cn=git,ou=group,dc=example,dc=com
  </Location>

  <Location /websvn>
    Require ldap-group cn=subversion,ou=group,dc=example,dc=com
  </Location>
</VirtualHost>

现在,使用此设置,用户在访问主站点时会收到登录提示,如果他们属于正确的开发组,则可以访问存储库。如果不是,则会再次提示他们进行另一次登录。

答案2

在 httpd.conf 中:

<Location /websvn>
    Require group development
</Location>

如果用户已经通过身份验证,则不会重新提示进行身份验证,而只会使用现有的凭据。

相关内容