sa-token学习(2)
官方文档地址sa-tokensa-token学习(1)cookie session localStorage sessionStoragesession共享原理文章目录单点登录单点登录的3种模式SSO模式一 共享Cookie同步会话SSO模式二 URL重定向传播会话SSO模式三 Http请求获取会话单点登录单点登录的3种模式SSO模式一 共享Cookie同步会话同域、同redis解决会话不能共享的方法1、使用 共享Cookie 来解决 Token 共享问题。2、使用 Redis 来解决 Session 共享问题。hosts作如下配置127.0.0.1sso.stp.com127.0.0.1s1.stp.com127.0.0.1s2.stp.com127.0.0.1s3.stp.com过程1、用户访问http://s1.stp.com:9001/但是由于未登录所以页面不会显示用户信息并且页面会显示1个用于登录的a标签此a标签指向http://sso.stp.com:9000/sso/auth?modesimpleclientsso-client1redirecthttp%3A%2F%2Fs1.stp.com%3A9001%2F当点击此a标签时就会将地址栏跳转到http://sso.stp.com:9000/sso/auth?modesimpleclientsso-client1redirecthttp%3A%2F%2Fs1.stp.com%3A9001%2F由于未登录所以此时会返回1个单点登录的页面2、当在单点登录的页面输入sa/123456发起ajax登录请求登录成功后就会得到set-cookie的头然后再刷新当前页面请求http://sso.stp.com:9000/sso/auth?modesimpleclientsso-client1redirecthttp%3A%2F%2Fs1.stp.com%3A9001%2F由于此时登录了通过携带cookie此时服务端返回302就让客户端重定向到redirect指向的地址http://s1.stp.com:9001/3、客户端重定向到redirect指向的地址后由于之前单点登录页面写的cookie与当前应用的页面在同1个主域名下所以会携带此cookie并且又由于后台共享redis所以就能拿到用户信息了4、其它应用点击登录http://sso.stp.com:9000/sso/auth?modesimpleclientsso-client1redirecthttp%3A%2F%2Fs2.stp.com%3A9001%2F就会携带单点登录成功所写入的cookie因此也会走第2步中的服务端返回302让客户端重定向到redirect指向的地址http://s2.stp.com:9001/然后同样走第3步携带此cookie又由于后台共享redis所以就能拿到用户信息了SSO模式二 URL重定向传播会话不同域、同redis多个系统之间为什么无法同步登录状态1、前端的Token无法在多个系统下共享。2、后端的Session无法在多个系统间共享。在跨域模式下意味着 “共享Cookie方案” 的失效我们必须采用一种新的方案来传递Tokenhosts作如下配置127.0.0.1sa-sso-server.com127.0.0.1sa-sso-client1.com127.0.0.1sa-sso-client2.com127.0.0.1sa-sso-client3.com过程1、用户访问http://sa-sso-client1.com:9002/但是由于未登录所以页面不会显示用户信息并且页面会显示1个用于登录的a标签此a标签指向/sso/login?back/当点击此a标签时就会将地址栏跳转到http://sa-sso-client1.com:9002/sso/login?back/由于在当前应用未登录服务器返回302状态码让客户端重定向到http://sa-sso-server.com:9000/sso/auth?clientsso-client2redirecthttp://sa-sso-client1.com:9002/sso/login?back%2F由于在sso服务器未登录所以此时会返回1个单点登录的页面2、当在单点登录的页面输入sa/123456发起ajax登录请求登录成功后就会得到set-cookie的头但是此cookie的头仅在sso服务器可用然后刷新当前页面请求http://sa-sso-server.com:9000/sso/auth?clientsso-client2redirecthttp://sa-sso-client1.com:9002/sso/login?back%2F由于此时登录了通过携带cookie此时服务器返回302就让客户端重定向到redirect指向的地址http://sa-sso-client1.com:9002/sso/login?back%2FticketrPe6CdXbVWqNnFm2PFq3MneHBsc5eGaA8BOWv5WL5yj31oZnpu3te3KeUCm6HBdh并注意到在后面还拼接上了ticket票据3、客户端重定向到redirect指向的地址并在url后拼接上了ticket票据此时应用端的后台服务就可以拿到此票据向sso服务器校验此ticket若校验ticket成功服务端返回302让客户端重定向到http://sa-sso-client1.com:9002/并设置当前应用端的set-cookie的头。此时客户端就可重定向到之前访问的地址。4、其它应用点击/sso/login?back/由于未登录服务端就会返回302让客户端重定向到http://sa-sso-server.com:9000/sso/auth?clientsso-client2redirecthttp://sa-sso-client2.com:9002/sso/login?back%2F客户端地址栏重定向之后发起请求由于之前已经登录过了sso服务器通过sso服务器的cookie服务端就返回302直接让客户端重定向到http://sa-sso-client2.com:9002/sso/login?back%2FticketnfX1uHbgnGKYKT3XoFbdhB8ofOTMrY9xMvai0xfSBG4otKv2VzlffMXLrWpa8uwK并且携带了票据。此后与步骤3相同SSO模式三 Http请求获取会话不同域、不同redis过程与模式二相同不同点在于模式三中的应用服务器和sso服务器不共享同1个redis库