如何告诉Apache回答403而不是401?

我们对Location s的子树有一些规则,涉及Require -ing ldap-groupexpr -s。

用户被挑战提供login凭证,这是validation。

但是,即使证书正确,并且由于其他原因(例如属于错误的组或来自不正确的IP地址)而导致访问被拒绝,服务器的响应始终为401 – 而不是403。

因此,浏览器不断提示用户“再试一次”…我可以告诉Apache(2.4)使用403,如果在Authorization标题中提供的信息检出,并且是其他规则,拒绝请求?

同样,我知道为什么authentication成功之后,某些用户的授权被拒绝 – 这是应该的。 我只需要与这些用户沟通,即:“是的,我们相信你是你自己说的那个人,但是你不能访问这个地方。”

看来,mod_rewrite是引发403响应的唯一方法 – 可以通过mod_rewriteexpression式检查LDAP组的成员身份,还是强制将状态从401更改为403?

我在WebMaster的网站上问了这个问题,但没有得到答案 – 那里的人似乎更多的内容为导向。

这是我的当前configuration的相关片段:

 <Location /foo> Require ldap-group CN=foo,OU=Groups,DC=example,DC=net </Location> 

当提供的用户名/密码validation,但要求不满意,我需要返回一个403 … 401当前正在返回。

我想你想要的是AuthzSendForbiddenOnFailure :

 AuthzSendForbiddenOnFailure On 

上下文:目录,.htaccess

如果authentication成功但授权失败,则默认情况下,Apache HTTPD将响应HTTP响应代码“401 UNAUTHORIZED”。 这通常会导致浏览器再次向用户显示密码对话,这在所有情况下都是不需要的。 AuthzSendForbiddenOnFailure允许将响应代码更改为“403 FORBIDDEN”。

请注意,它带有安全警告:

安全警告

在缺less授权的情况下修改响应会减弱密码的安全性,因为它向可能的攻击者揭示了他猜测的密码是正确的。