在主站点了退出,切到同域的子站后台,右上角还挂着用户名,直接就能进后台操作,几乎没人发现。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
foreach ($sites as $url) {
wp_remote_get(add_query_arg([
'action' => 'sso_logout', 'token' => $token,
], $url), ['timeout' => 3]);
}
单点登录只做了登录同步,注销环节没有回调各子站去清本地 cookie 与会话,令牌还活着,用户看着像是退了,实际还能进,等于没退。这一点先确认清楚,后面就不用反复试。
「WordPress 单点登录登出」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,主站注销的时候依次请求各个子站的登出地址;子站校验签名通过之后销毁本地保存的会话和 cookie;把失败的回调记录进来,下一次登录之前再重试。
改完照着核一遍,主站退出后子站刷新即回登录页,后台地址无法直接进入,站点仍安全。
