我有一个小型 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>
如果用户已经通过身份验证,则不会重新提示进行身份验证,而只会使用现有的凭据。