如何告诉 Apache 使用 403 而不是 401 来回复?

如何告诉 Apache 使用 403 而不是 401 来回复?

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

用户需要提供经过验证的登录凭证。

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

结果,浏览器不断提示用户“再试一次”...如果 -header 中提供的信息Authorization检查无误,并且是其他一些规则拒绝了请求,我可以告诉 Apache (2.4) 使用 403 吗?

我再说一遍,我知道,为什么, 之后验证成功,授权被某些用户拒绝——这是理所当然的。我只需要向这些用户传达:“是的,我们相信您就是您所说的那个人,但您无权访问此位置。”

看来,mod_rewrite 是引发 403 响应的唯一方法——mod_rewrite 表达式可以检查 LDAP 组的成员资格或强制将状态从 401 更改为 403 吗?

我在网站管理员的网站,但没有得到答案——那里的人似乎更内容导向。

这是我当前配置的相关片段:

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

当提供的用户名/密码被验证,但要求不满足时,我需要返回 403...当前返回 401。

答案1

我认为你想要的是AuthzSendForbiddenOnFailure

AuthzSendForbiddenOnFailure On

上下文:目录,.htaccess

如果身份验证成功但授权失败,Apache HTTPD 将默认使用 HTTP 响应代码“401 UNAUTHORIZED”进行响应。这通常会导致浏览器再次向用户显示密码对话框,而这在任何情况下都是不希望的。AuthzSendForbiddenOnFailure 允许将响应代码更改为“403 FORBIDDEN”。

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

安全警告

在缺少授权的情况下修改响应会削弱密码的安全性,因为它会向潜在的攻击者透露他猜测的密码是正确的。

相关内容