HAProxy 通过内置 Basic Auth、auth-request 调用外部认证服务、Lua 脚本校验 JWT、或集成 OIDC 实现负载均衡层身份验证。其中,Basic Auth 适用于低敏感场景;auth-request 解耦认证逻辑,推荐生产使用;Lua 验证 JWT 提升性能;OIDC 支持单点登录,需配合会话管理。

HAProxy 本身不直接提供用户账号密码认证服务,但可以通过多种方式在负载均衡层集成身份验证,实现请求级访问控制。关键在于利用其 auth-request 机制、内置 Basic Auth 支持,或与外部认证服务(如 OAuth2 / JWT 提供方)联动。
使用内置 Basic Auth 实现简单认证
适用于内部管理接口或低敏感度场景,配置轻量、无需额外服务。
- 在
frontend或backend中添加http-request auth指令 - 通过
userlist定义本地用户(明文或 bcrypt 加密密码) - 示例配置片段:
userlist Users user admin password $2y$10$abc... # bcrypt hash user guest password $2y$10$def... - 前端启用认证:
http-request auth realm "Restricted" unless { http_auth(Users) }
通过 auth-request 调用后端认证服务
这是生产环境推荐方式,将认证逻辑解耦到专用服务(如 Ory Hydra、Keycloak、自建 Auth API),HAProxy 仅做代理和决策。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 配置一个独立的
backend指向认证服务(例如auth-backend) - 在主
frontend中使用http-request set-var和http-request auth触发子请求 - 典型流程:客户端请求 → HAProxy 发起子请求到
/auth/check→ 认证服务返回 200(允许)或 401/403(拒绝)→ HAProxy 根据响应放行或拦截 - 支持携带原始请求头(如
Authorization),便于校验 Bearer Token 或 Cookie
用 Lua 脚本验证 JWT 令牌
适合 API 网关场景,避免每次请求都穿透到后端认证服务,提升性能和安全性。
- 加载
haproxy-lua-oauth库,支持 RS256/HS256 等签名算法 - 脚本读取
Authorization: Bearer <token>,解析并校验签发者(iss)、受众(aud)、过期时间(exp)等声明 - 校验成功后可提取
sub、scope等字段,写入 HAProxy 变量供后续 ACL 使用 - 示例 ACL:
acl is_admin var(txn.jwt_scope) -m sub admin,实现基于 scope 的路由或拦截
结合 OIDC 实现单点登录(SSO)
当已有 OpenID Connect 提供方(如 Ory Hydra)时,HAProxy 可作为反向代理参与授权码流程。
- 配置
redirect规则,将未认证用户重定向至 IDP 的/oauth2/auth端点 - 接收 IDP 返回的授权码,用 HAProxy + Lua 或外部服务完成 token exchange
- 将获取的 ID Token 或 Access Token 存入 Cookie 或 Header,转发给后端应用
- 注意:完整 OIDC 流程需配合会话管理(如加密 Cookie)和状态校验,建议搭配专用网关组件

















