HAProxy 获取与 Basic Auth 关联的用户名

HAProxy get username associated with Basic Auth

我目前正在使用 HAProxy 的 http-request auth 操作来有条件地限制对资源的访问。我想继续将与成功授权关联的用户名添加到传递给后端的请求的 headers,模拟 Apache 环境变量 HTTP_AUTH_USER.

我可以通过 http_auth_group 获得与该操作关联的组,但更希望有用户名。

我很感激我可以将此操作移至 Web 服务器,但我宁愿不在 10 台机器上管理少量用户名和密码,因为我可以通过代理在 2 个地方执行此操作。

http_auth_group layer 7 sample fetch这个名字乍一看有点乱,里面有"group"两个字,暗示它是returns组。事实上,它将组作为其参数并且 returns 没有值,除非请求已使用指定组成员的凭据进行身份验证......在这种情况下,它 returns 用户名。

所以它有两个目的:测试其真实性以确定该组的任何成员是否已对请求进行身份验证,或者提取用户名。所以...

http-request set-header X-Username %[http_auth_group(GROUP_NAME)]

...将删除传入请求中的任何X-Username:header(case-insensitive)(如果已经存在),并填充一个新的 X-Usernane: header 带有经过身份验证的用户的用户名,否则为空值(如果您的配置允许匿名请求)。

使用 set-header 很重要, 不是 add-header,因为添加 header 不会删除任何匹配的 header在传入的请求中,这会带来安全风险。除非您有特殊原因要添加,否则始终设置。