CDN 回源跟随配置导致登录异常问题排查
问题现象
最近遇到了一个诡异的登录问题:JumpServer 服务和 Halo CMS 服务在输入正确的账号密码后都无法正常登录。
博主 Handsome 补充:所有的 SSO(单点登录)都会遇到同样的问题。(例如:使用 QQ 认证登录,GitHub 认证登录)
起初启用了双因素认证(2FA),系统总是提示 2FA 验证码错误。我一度怀疑是基于 TOTP 的双因素认证配置出了问题。
更奇怪的是,当我关闭 2FA 后,虽然能够成功通过身份验证,但页面并不会跳转到后台管理界面,而是一直停留在登录页面。
排查过程
面对这个问题,我开始系统性地排查:
- 验证账号密码:确认无误
- 检查 2FA 配置:排除 TOTP 时间同步问题
- 局域网内登录测试:服务运行正常
- 分析后台日志:登录请求实际上是成功的
- 检查本地 WAF:CDN 回源跳过 WAF 仍复现问题
逐步排查后,问题指向了 CDN 配置。
根本原因
最终定位到问题的罪魁祸首:CDN 的“回源跟随”配置项。
当启用回源跟随时,CDN 会自动跟随源站返回的 3xx 重定向响应。这在某些场景下是有用的,但在处理登录重定向时却会导致问题:
- 登录成功后,服务器返回 302 重定向到管理后台
- CDN 拦截了这个重定向,导致浏览器无法正确跳转
- 导致 Session/Cookie 上下文错乱,提示登陆失败
解决方案
关闭 CDN 的“回源跟随”配置项,问题立即解决。
(“回源跟随”在不同 CDN 系统的别名:“回源301/302跟随”、“回源跟随重定向”)
0