我有一个小的Apache网站,我已经成功地使用mod_authz_ldap实现了基本的LDAPauthentication。 但是,我在尝试实现两个级别的连续authentication时遇到问题。 一旦一个有效的用户被authentication一次,他们从来没有被提示进行二次authentication,这对于该网站的特定部分应该是必需的。 也就是说,所有有效的用户都可以login,但是只有这些用户的一部分访问站点的部分内容时才会重新进行身份validation。
例如,我要求访问example.com的每个人都被authentication为有效的LDAP用户。 然后我在example.com/websvn上有一个subversion版本库,我只想限制为“开发”组,这是有效用户的一个子集。
我的问题是,一旦用户在example.com上被成功validation为有效,那么当他们导航到example.com/websvn时,他们永远不会被重新提示为“开发”用户进行身份validation。 即使有效用户确实不在开发组中,也会发生这种情况。 我可以通过直接连接到example.com/websvn来testingrepo身份validation,但是当我第一次在example.com进行身份validation时,然后访问example.com/websvn,我被授予了访问权限,不会提示input密码。
我如何正确实施这样的两阶段authentication? 我希望所有有效的用户访问主站点,但只有开发用户才能访问websvn。 所以有效的用户必须重新validation以检查他们是否在开发组中。
谢谢!
斯科特的回答使我走上了正确的道路。 最初我有一些authentication指令在不同的文件中复制,一个用于主站点,另一个用于gitweb和websvn特定的configuration。 我从gitweb和websvnconfiguration中删除了authentication位,并将所有身份validation信息移到了主站点文件中.../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>
现在使用这个设置,访问主站点时提示用户login,如果他们在正确的开发组中,他们可以访问回购站。 如果不是,则再次提示他们再次login。
在httpd.conf中:
<Location /websvn> Require group development </Location>
如果用户已经过身份validation,则不会再提示进行身份validation,只会使用现有凭据。