生产单点登录反复跳认证排查

生产单点登录反复跳认证排查

记录时间:2026-09-09
环境:生产单点登录门户(外层 nginx + K8s ingress-nginx + CAS 多副本 + TongWeb WAR 业务系统)

一、问题现象

生产环境切换业务系统时,登录态反复丢失,被踢回 /cas 认证;测试环境一切正常。

最初的排查点就错了:同事拿着 AI 认定是 j_s_id 跨应用冲突解决方案,要求全量加 proxy_cookie_path / /xxx。我按领导要求配置落地后引发其他访问无法加载,回滚;后续还坚持在 /oa、443 内网端口的两轮验证均证明这条路无效(后面我也把整个过程告诉他) —— 因为proxy_cookie_path 只能改本 location 响应里带了 Path 的 cookie,够不着 SSO 登录链路,和 ingress 配置叠加还会双重前缀。其实他们一开始就错了! 根本不是 j_s_id path 的问题。

二、排查过程

  • 全站核查:21 个 ingress + 27 个 nginx sticky upstream,全在用同名亲和 cookie route(Path=/);
  • 源码核实:j_s_id 是开发在代码里写死的(SSO client SDK 里 setName("j_s_id") + setPath("/")),由服务端下发、前端不生成;代码不是生产/测试的差异点;这就是为什么 proxy_cookie_path / /xxx 不生效;因为后端本来就写死了!
  • 生产/测试配置对比:唯一关键差异是生产 12 个 ingress 显式配置了 session-cookie-path: /

三、根本原因

生产 12 个 ingress 配置了 session-cookie-path: /,同域名下所有服务的亲和 cookie route 同名同路径互相覆盖。CAS 是多副本、登录票据(TGT)存在 pod 内存里,粘性失效后请求落到别的 pod 就找不到 TGT,判定未登录,反复跳认证。

这样配置的初衷:这些 WAR 都是旧服务,多副本部署是为了解决 js/css 静态资源跨 pod 无法请求的问题,所以把亲和 cookie 路径设成 /,让所有请求都粘在同一个 pod 上。初衷没问题,但同域名下 12 个服务的 route 互相覆盖,把 CAS 的粘性也一起覆盖掉了。

测试环境没配这个注解(单副本),亲和 cookie 按各自 ingress 路径天然隔离,所以测试环境没问题,生产存在异常

(j_s_id 跨应用覆盖只是伴随的次问题,TGC 还在就能静默换票恢复,不是主因。)

四、解决办法

  • 删除生产 12 个 ingress 的 session-cookie-path: /(对齐测试环境),已上线生效;
  • 此前批量加的 proxy_cookie_path 全部撤离;
  • TGC cookie 保持不动(全局令牌必须跨路径下发)。

五、验证

生产实测:清 cookie 登录后切换多个业务系统,不再跳认证;route 按各自 ingress 路径隔离(如 Path=/wmyc)。

六、注意事项

  • proxy_cookie_path 管不到 SSO 登录链路下发的 cookie,与 ingress 配置叠加还会双重前缀,不要用来做 cookie 隔离;
  • 同域名下多套系统共用亲和 cookie 名时,名字或路径必须错开;
  • sticky 模块默认 route + Path=/,查同域 cookie 覆盖时别漏这一层。

七、参考资料

  • Nginx 文档:proxy_cookie_path、nginx-sticky-module-ng 默认参数(name=route、path=/)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇