2023Job所需知识点
SSO
SSO(Single Sign On):
# 背景
后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。
栗子:比如阿里系的淘宝和天猫,很明显地我们可以知道这是两个系统,但是你在使用的时候,登录了天猫,淘宝也会自动登录。
简单来说,单点登录就是在多个系统中,用户只需一次登录,各个系统即可感知该用户已经登录。
单系统
- 用户登录时,验证用户的账户和密码
- 生成一个Token保存在数据库中,将Token写到Cookie中
- 将用户数据保存在Session中
- 请求时都会带上Cookie,检查有没有登录,如果已经登录则放行
多系统登录的问题与解决
Session不共享问题
- SSO系统生成一个token,并将用户信息存到Redis中,并设置过期时间
- 其他系统请求SSO系统进行登录,得到SSO返回的token,写到Cookie中
- 每次请求时,Cookie都会带上,拦截器得到token,判断是否已经登录
总结为两个改变
- 将登陆功能抽取为一个系统(SSO),其他系统请求SSO进行登录
- 本来将用户信息存到Session,现在将用户信息存到Redis
思考:Ids4 :vue -> ids4 -> vue ---> 后台系统
Cookie跨域的问题
上面我们解决了Session不能共享的问题,但其实还有另一个问题。Cookie是不能跨域的
比如说,我们请求https://www.google.com/时,浏览器会自动把google.com的Cookie带过去给google的服务器,而不会把https://www.baidu.com/的Cookie带过去给google的服务器。
这就意味着,由于域名不同,用户向系统A登录后,系统A返回给浏览器的Cookie,用户再请求系统B的时候不会将系统A的Cookie带过去。
针对Cookie存在跨域问题,有几种解决方案:
服务端将Cookie写到客户端后,客户端对Cookie进行解析,将Token解析出来,此后请求都把这个Token带上就行了
多个域名共享Cookie,在写到客户端的时候设置Cookie的domain。
将Token保存在SessionStroage中(不依赖Cookie就没有跨域的问题了)
到这里,我们已经可以实现单点登录了。
CAS原理
微服务
学习自‘老张的哲学-blogcore高级进阶’

认证平台设计

管理分配

数据问题
SOA依赖于事件总线
跨域:可要可不要:因为前端都是通过网关的形式向客户端发送请求
强单体:微服务中,子服务不需要
services.AddSession();//微服务时,子服务不需要

网关/Ocelot


浙公网安备 33010602011771号