验证临时票据过程中,无法从cookie中获取用户票据

验证临时票据过程中,无法从cookie中获取用户票据

老师,请教个问题:

将用户票据设置到cookie的过程是发生在,cas模块的统一登录过程,是由cas自己的登录页面发起的请求,相应的cookie设置到了sso.com这个域下

从cookie中获取用户票据的过程,是发生在验证临时票据的过程中,这个请求是mtv.com这个应用发起的,从request中获取cookie,再获取对应的用户票据,这个请求发生在mtv.com这个域下,应该是获取不到sso.com这个域下的cookie啊

我自己在本地跑的时候,也一直获取不到,下面的代码中的userTicket一直返回的是null

// 1. 验证并且获取用户的userTicket
String userTicket = getCookie(request, COOKIE_USER_TICKET);

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
zhouywjava 2020-07-18 23:16:18

题主,我也遇到这个问题,请问题主后来是怎么解决了?

提问者 初尘_勿忘 2020-02-23 08:04:09

查看前端代码的时候,发现使用了一个技巧

axios.defaults.withCredentials = true;

axios.post('http://www.sso.com:8090/verifyTmpTicket?tmpTicket=' + tmpTicket)

通过设置withCredentials参数,虽然请求跨域,但是cookie也是可以携带的,这个应该是个关键点。但是问题来了,我们目前的CAS认证的这种模式的目的就是为了解决顶级域名不同无法共享Cookie这个问题。通过设置withCredentials的方式是不是与CAS的初衷有点儿违背呢?


  • 这个肯定要设置啊,不设置cookie拿不到的
    2020-02-23 08:55:49
coding_zhang 2020-02-22 09:40:50

mtv请求不到sso域名下的,不能跨域。但是sso的后端是可以获取到的呀

  • 另外临时票据会在mtv站点前端发起请求携带到sso的,你可以根据前端源码也能梳理一下的哈
    2020-02-22 09:43:19
  • 一旦初次登录成功,创建的的临时票据是会回调的
    2020-02-22 09:44:28
  • 提问者 初尘_勿忘 回复 coding_zhang #3
    不是这个问题,我使用的是chrome浏览器存在问题,但是换成firefox就没有问题。查看了一下chrome浏览器的控制台,可以看到警告“A cookie associated with a cross-site resource at http://sso.com/ was set without the `SameSite` attribute. It has been blocked, as Chrome now only delivers cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.” 感觉和这个有关系
    2020-02-22 14:56:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师