前后端分离时,每次请求的 SessionId 不一致,导致认证失败

来源:5-8 实现基于session的SSO(认证服务器的session有效期)

岁月丶如歌

2019-12-10

  1. 第一次认证成功后,访问 /me 时 JSESSIONID=BA7C73188883BB6193F76BC8FB602446
  2. 然后第一次访问订单请求 /api/order/orders/1 RequestHeaders 里 Cookie JSESSIONID=BA7C73188883BB6193F76BC8FB602446,请求成功;ResponseHeaders会重新set-cookie: JSESSIONID=7A73016784EF761FA23BABDB32C7770B; Path=/; HttpOnly
  3. 第二次访问订单请求 /api/order/orders/1 RequestHeaders 里 Cookie JSESSIONID=7A73016784EF761FA23BABDB32C7770B,请求失败;ResponseHeaders会重新set-cookie: JSESSIONID=5A52D9A2E379568809DE8C2A3B2C6626; Path=/; HttpOnly

图片描述
图片描述
图片描述

我前端用vue实现的,认证成功后,第一次请求订单服务携带的JSESSIONID是能在后端中找到对应session的,可以请求成功,但是请求成功后response会重新setCookie,JSESSIONID是一个新的值,导致第二次请求订单服务的时候携带的JSESSIONID在后端找不到对应的session,就没有session里面的token,网关token校验的时候就失败了。
图片描述
我在admin后端,加了一个CorsFilter 处理跨域的请求。但是还是一个,每次请求都会生成一个新的SessionID,Vue前端 axios.defaults.withCredentials = true也设置了跨域的。

请老师帮忙看看怎么回事?

写回答

1回答

JoJo

2019-12-11

spring security有个默认的防止session固定攻击的设置,在配置里关掉试一下,见下图

//img.mukewang.com/szimg/5df0b56109fd6df007250035.jpg

0
2
岁月丶如歌
老师,是不是网关zuul那里出了问题?涉及到路由转发的我也配置了 sensitive-headers: 好像是因为产生了新的session,然后响应的时候就把新的sessionid写到cookie里了
2019-12-12
共2条回复

Spring Cloud微服务安全实战 可落地的安全方案

从API到复杂微服务场景,实战部署可落地的安全方案。

1029 学习 · 370 问题

查看课程