我们的 Apache 同时使用 mod_shib_24(SAML-SP)和 mod_auth_openidc(OIDC-RP),它们都连接到 Shibboleth IdP(充当 SAML-IDP 和 OIDC-OP)。
此外,我们还有 2 个受保护位置,一个受 SAML 保护,另一个受 OIDC 保护:
ShibCompatValidUser On
<Location "/">
Require shib-session
AuthType Shibboleth
ShibRequestSetting requireSession 1
ShibUseHeaders On
</Location>
<Location "/oidctest">
Require valid-user
AuthType openid-connect
</Location>
现在到了令人困惑的部分:
如果我访问 /oidctest/ 以外的任何内容,我必须使用 SAML 登录(mod_shib_24 参与,正如预期的那样),但在成功验证身份后,我也可以访问 /oidctest/,而无需通过 OIDC 进行验证。
反过来也一样。如果我首先访问 /oidctest/(新的私人窗口),我必须使用 OIDC 进行身份验证(mod_auth_openidc 参与其中,正如预期的那样),身份验证成功后,我还可以访问所有其他位置(/oidctest/ 除外)。
那么 Apache 如何处理有效用户指令?Apache 中如何定义“有效用户”?
一旦用户登录,他是否对所有事情都有效,无论授权类型、模块还是协议?
或者这是一种意外的行为?
答案1
我从 Shibboleth wiki 中了解到ShibCompatValidUser 开启设置明确旨在兼容需要有效用户陣容 註釋 .
在 V2.5.2 之前,当 ShibCompatValidUser 处于 Off(默认)状态时,这相当于上面的 shib-session 规则。启用 ShibCompatValidUser 选项后,此规则与 Apache 自身实现的规则兼容,并且要求为请求设置非空 REMOTE_USER 值。这恢复了与其他模块和规则一起部署 Shibboleth 的能力。SP 的未来版本可能会删除“特殊”定义,并且应将此类规则更改为依赖 shib-session。
看https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPhtaccess
为了区分模块,您还可以使用测试需要环境查找模块设置的环境变量。Shibboleth 默认设置Shib 会话 ID例如。
看https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAttributeAccess