前端同域
- 客户端前端同域,则cookie可以存在相同的域名或顶级域名下,一个客户端登录成功后,将token信息保存到域名下的cookie中
- 其他不同客户端访问时,因为域名或者顶级域名相同,也能取到域名下的cookie中的token信息并传到后端
前端不同域
-
由于前端客户端不同域,那么不同客户端登录后,保存cookie中的token信息其他客户端并不能取到。因此需要一个能够传递token媒介。
-
认证信息的service端只有一个域名,因此把认证信息的service端域名下的cookie作为传输的媒介。
-
当客户端1登录时,客户端1未登录,则重定向到service端进行登录(携带着客户端自己的地址,等认证通过后跳转回来),sevice端弹出登录界面,输入账号、密码登录完成后,将token信息保存到service域名的cookie下。
-
service已登录,创建ticket(创建一个key与账号的缓存)信息并携带ticket信息重定向到到客户端1,客户端1根据ticket中的账号信息进行登录,并重定像到最初的地址(保存token信息到客户端1域名下的cookie)。
-
客户端2进行登录,客户端2未登录,则重定向到service端进行登录,此时重定像到service端的时候,能够携带sevice端域名下的cookie中的token信息进行验证,验证已登录,则创建ticket(信息并携带ticket信息重定向到到客户端2。
***可能大家会想,用户A认证通过SSO后,通过回调地址将Token返回给原业务系统,原业务系统直接设置登 录状态,这样流程简单,也完成了登录,那为什么还要还要拿Token再次访问SSO进行验证呢?其实这样问题 时很严重的,如果用户在SSO没有登录,而是直接在浏览器中敲入回调的地址,并带上伪造的用户信息,是不 是业务系统也认为登录了呢?这是很可怕的。***