SAML IdP如何向SP传达状态变更?PHP集成场景咨询
嘿,我刚好对这个场景挺熟悉的,帮你梳理下OneLogin怎么传达强制登出、权限移除这类变更,以及SimpleSAMLphp作为SP该怎么应对:
一、OneLogin传递这类变更的两种核心方式
1. 主动推送SAML注销请求(SLO)
当管理员在OneLogin后台强制注销用户、移除用户应用权限时,OneLogin可以主动向你的SP发起单点注销请求。不过默认的测试连接器可能没开启这个功能,得手动配置:
- 进入OneLogin的「SAML Test Connector (IdP w/attr)」配置页面,找到「Single Logout」板块,开启后填写你的SP的SLO回调URL——就是SimpleSAMLphp的这个地址:
/simplesaml/module.php/saml/sp/saml2-logout.php/<你的SP实体ID> - 必须保证双向配置匹配:SP这边要在
saml20-idp-remote.php里配置IdP的SLO URL,IdP那边也要配置好SP的SLO URL和对应证书
2. 会话与权限的被动校验
如果老旧应用没法实时接收异步推送请求,还有个兜底方案:在用户每次访问应用时,主动向IdP验证会话有效性和权限状态:
- 在SimpleSAMLphp的登录校验逻辑里,调用
$as->requireAuth(array('ForceAuthn' => true)),这个参数会强制IdP重新验证用户的身份和权限,而不是依赖本地会话缓存 - 也可以定期(比如每个页面加载、每15分钟)调用
$as->getAttributes(),对比本地存储的权限信息,如果IdP返回的属性(比如用户所属权限组)发生变化,就更新本地状态,甚至强制用户重新登录
二、SimpleSAMLphp的具体配置调整
- 要开启SP的SLO功能,修改
saml20-sp-hosted.php配置文件:'SingleLogoutService' => array( 'url' => 'https://你的应用域名/simplesaml/module.php/saml/sp/saml2-logout.php/你的SP实体ID', ), - 同时在IdP远程配置文件
saml20-idp-remote.php里,添加IdP的SLO信息:'SingleLogoutService' => array( array( 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'https://app.onelogin.com/trust/saml2/http-redirect/slo/你的IdP实体ID', ), ),
三、OneLogin测试连接器的小细节
注意:OneLogin的「SAML Test Connector (IdP w/attr)」默认不会自动触发主动SLO,你需要在OneLogin后台手动操作:找到目标用户,进入「Applications」标签页,点击「Revoke Access」或者「Force Logout」,这时候OneLogin才会向你配置好的SP SLO URL发起注销请求。
如果你的老旧PHP应用没法处理后台异步的SLO POST请求,那被动校验的方式就更适合你——通过每次用户操作时的主动检查,确保应用内的用户状态和IdP保持一致。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

