SSO单点登录

Cookie

https://segmentfault.com/a/1190000004556040

https://www.jianshu.com/p/2879fb0a5b2e

对于浏览器,会存储每个域名的cookie,当访问的时候,会自动将cookie加入。

cookie有过期日期等属性,但是属性是给浏览器用的,不是给server用的,客户端向server传cookie的时候只传值,不传属性

cookie的默认过期时间是会话结束,关闭了浏览器就没有了,这种cookie存在内存中。如果设置了过期时间则存在硬盘中,而且可以浏览器共享。

cookie的存储目录是什么样子?是明文存储吗?

SSO登陆

https://yq.aliyun.com/articles/636281

https://blog.csdn.net/wang379275614/article/details/46337529

  • 用户在使用通过ssoServer的验证之后会收到一个tgc(ticket-grant-cookie),用户就是使用这个tgc来证明自己的身份的。
  • 当用户访问业务系统时(app.com),
    • 302到sso(携带了tgc)
    • sso验证tgc后,重定向到业务系统,并通过url返回1个属于业务系统的st(service-ticket)app.com?st=12345678
    • 业务系统使用st向sso提交验证,验证通过后再cookie中设置一个sessionid,后续同session的请求通过session进行验证。
  • 第一次登陆的时候,tgc和st是在同一个response中被返回,这样就节省了一次访问。

tgc是属于sso-server的cookie。只会向SSO服务器发送tgc(即使是业务系统也没有权利获知tgc)。为了防止业务系统A恶意登录业务系统B。

st是属于业务系统的cookie,生命周期一般是几天。每个业务系统会有自己的st。业务系统通过st向SSO服务器验证用户身份。

JsessionId是业务系统的cookie,生命周期是session级别。同一个session中的第1次请求通过st进行验证,第2次请求则通过JsessionID验证。


问题:验证通过后将秘钥存在cookie中,后续客户端通过秘钥访问业务系统?

  • 业务系统a和业务系统b可能存在跨域问题。
  • 业务系统a和业务系统b使用相同的秘钥,意味着a系统可以恶意访问b系统

问题?

SSO系统登录后,SSO返回浏览器一个st,然后浏览器拿token再次访问业务系统,业务系统再拿ST再次访问SSO进行验证,这个步骤好像有点多余。若果SSO登录认证通过后,通过回调地址将用户信息返回给原业务系统,原业务系统直接设置登录状态,这样流程简单,也完成了登录,不是很好吗?

如果这样设置会存在这样的问题:如果我在SSO没有登录,而是直接在浏览器中敲入回调的地址,并带上伪造的用户信息,是不是业务系统也认为登录了呢?这是很可怕的

如果非要优化的话,可以将token返回给业务系统,让业务系统带着token请求一次sso,免掉了一次客户端的调用。本质上是保证业务系统主动请求用户信息,而不是被SSO回调。


第二次访问sso的时候,会发生什么?

“第二次”的描述并不准确,“第二次”其实可以分为两种:

一种是session还没有断开时的第二次访问,这种情况下的第二次访问是不再需要sso参与的。业务系统在session的第一次业务请求中确定了用户的身份之后,之后就可以通过sessionid验证用户身份(或者生成一个业务系统的token)。

一种是session已经断开,因为用户相关的信息会被暂存到session里面,所以这时候业务系统需要再次从sso中请求用户信息,所以需要client再请求sso拿token,需要注意的是这次和第一次相比,client的cookie中残留了上一次的st,sso中也会记录这个st已经登录,所以不需要用户再次输入用户密码。

只要持有tgc或者st就可以伪造客户端登录系统,所以这两个token是至关重要的,所以同一用户的token会被定期刷新。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值