apache本身不是统一认证中心,但可作为认证代理集成sso:需启用mod_authnz_ldap等模块,配置authldapurl指向ad/ldap,结合require ldap-group实现目录级权限控制,并通过mod_proxy、mod_ssl等协同idp完成跨站点身份传递。

Apache 本身不是专门的统一认证中心,但它可以作为认证代理或网关层集成点,参与构建跨站点统一认证体系。关键不在于 Apache 单独完成 SSO,而在于它如何协同身份提供者(IdP)和服务提供者(SP),在 HTTP 层可靠传递、校验和注入用户身份信息。
启用并配置核心认证模块
Apache 需要加载并正确配置若干模块,才能支撑统一认证流程:
- mod_auth_basic / mod_auth_digest:用于基础目录保护或与外部 IdP 配合做前置校验(如代理后端前验证 token)
- mod_proxy + mod_proxy_http / mod_proxy_ajp:实现反向代理,把多个不同端口或路径的应用“收敛”到同一域名下,规避跨域 Cookie 限制
- mod_headers + mod_rewrite:修改响应头(如重写 Set-Cookie 的 Domain)、转发请求头(如注入 X-Forwarded-User)、重定向登录请求到 IdP
- mod_ssl(必须):所有涉及凭证、token 或会话的传输都需 HTTPS,否则 Basic 认证明文、JWT 签名易被截获
对接主流 SSO 协议(以 OIDC 为例)
Apache 不原生支持 OIDC,但可通过第三方模块接入:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 使用 mod_auth_openidc(推荐):编译安装后,在虚拟主机中配置 IdP 的 issuer、client_id、client_secret 和回调地址;它会自动处理授权码交换、JWT 校验,并将用户信息注入请求头(如
X-Forwarded-User)供后端应用读取 - 避免硬编码密码文件:禁用
AuthUserFile类配置,改由 IdP 全权管理凭证;Apache 只负责“信任并传递”身份断言 - 设置
Require claim email:.*@company.com等声明式授权规则,实现基于 JWT payload 的细粒度访问控制
统一会话与 Cookie 域控制
跨站点时浏览器默认隔离 Cookie,Apache 需主动协调:
- 所有 SP 应部署在同一根域名下(如
app1.example.com、app2.example.com),并统一设置session.cookie_domain = ".example.com" - 若无法共用子域(如本地开发用 localhost),改用端口隔离 +
Header edit Set-Cookie强制覆盖 Domain 字段为localhost(仅限测试环境) - 后端应用不再依赖本地 session 文件,而是通过 Redis 或数据库共享 session 存储,并由 Apache 代理层确保请求携带一致的 Cookie 路径与域
与 LDAP/AD 等目录服务集成
当企业已有 Active Directory 或 OpenLDAP,Apache 可直接作为认证代理:
- 启用 mod_authnz_ldap,配置
AuthLDAPURL指向 LDAP 服务器,用 DN 绑定查询用户 - 结合
Require ldap-group实现基于目录组的权限控制,无需为每个应用单独维护用户列表 - 注意:LDAP 仅提供身份验证(Authentication),不解决跨应用会话同步问题——仍需配合 Redis session 或 IdP 发放的 token 实现 SSO









