如何在已配置Shibboleth SAML2认证的Apache中实现双认证共存
Apache下SAML2(Shibboleth)与OAuth2认证共存配置方案
1. 前置依赖安装与启用
- 原有Shibboleth模块(
mod_shib)保持已启用状态,原有基础配置无需修改 - 新增OAuth2认证模块,推荐使用
mod_auth_openidc,支持标准OAuth2/OIDC协议,适配绝大多数OAuth2身份源 - 启用必备基础模块:
mod_proxy、mod_proxy_http、mod_ssl(HTTPS站点必须开启) - 模块启用命令参考:
- Debian/Ubuntu系:
a2enmod auth_openidc proxy proxy_http ssl - CentOS/RHEL系:在
httpd.conf中新增对应.so模块加载配置
- Debian/Ubuntu系:
2. 核心配置逻辑
两种认证共存的核心是按访问路径、请求凭证、用户选择标识做路由分流,避免两套认证规则同时作用在同一请求上产生冲突,两种认证的会话、回调逻辑完全隔离。
3. 分场景配置示例
3.1 场景1:不同路径对应不同认证方式
适合原有业务路径走SAML2(ADFS)认证、新增业务路径走OAuth2认证的场景:
# 原有Shibboleth全局基础配置保留 <IfModule mod_shib.c> ShibConfig /etc/shibboleth/shibboleth2.xml ShibRequestSetting applicationId default ShibRequireSession Off ShibUseHeaders On </IfModule> # 新增OAuth2全局基础配置 <IfModule mod_auth_openidc.c> OIDCProviderMetadataURL https://你的OAuth2身份源地址/.well-known/openid-configuration OIDCClientID 你的OAuth2客户端ID OIDCClientSecret 你的OAuth2客户端密钥 OIDCRedirectURI https://你的站点域名/oidc/callback OIDCCryptoPassphrase 自定义随机加密字符串 OIDCRemoteUserClaim sub OIDCScope "openid email profile" </IfModule> # 原有后台路径,保留SAML2认证逻辑 <Location /admin> AuthType shibboleth ShibRequestSetting requireSession 1 require valid-user RequestHeader set X-User-Id %{Shib-uid}e </Location> # 新增API/业务路径,走OAuth2认证 <Location /api> AuthType openid-connect Require valid-user RequestHeader set X-User-Id %{OIDC_CLAIM_email}e </Location> # 公共路径放开权限,可放置登录选择入口 <Location /login> Require all granted </Location>
3.2 场景2:同一路径支持两种认证方式自主选择
适合用户可自行选择登录方式的场景,需要先开发一个简单的登录选择页,提供SAML2登录、OAuth2登录两个入口:
<Location /app> # 优先校验请求是否携带任意一种有效认证凭证 <If "!(%{REQUEST_HEADERS.Shib-uid} || %{REQUEST_HEADERS.OIDC_CLAIM_sub})"> # 无有效凭证则跳转至登录选择页 Redirect /app /login </If> Require all granted </Location> # 两种认证的回调地址单独放开权限,避免被拦截 <Location /Shibboleth.sso> Require all granted </Location> <Location /oidc> Require all granted </Location>
4. 冲突规避注意事项
- 两种认证的会话Cookie名称不要重复,
mod_shib默认Cookie前缀为_shibsession_,mod_auth_openidc默认Cookie为mod_auth_openidc_session,如果自定义过Cookie名称需要调整为不重复的命名 - 建议统一两种认证的用户属性输出请求头名称,比如都将用户唯一标识写入
X-User-Id头,后端业务无需区分认证来源即可统一读取用户信息 - 测试时先单独验证两种认证逻辑都可正常工作,再调试共存规则,避免配置叠加导致问题排查困难
内容的提问来源于stack exchange,提问作者antoweb
相关产品推荐
相关产品推荐

