xxl-sso单点登录
一、如何实现一个简单的认证中心?
我们知道单点登录系统:出名的有apereo的cas和OAuth2、JWT等。通常认证有两个方案:
一个方案是基于token,另一个方案是基于cookie的。基于xxl-sso,我们可以学习到实现的基本是基于过滤器的增强,从而实现重定向。我之前的公司使用的是基于apereo的cas进行的二次开发配合统一授权系统使用。cas的单点登录的登录涉及到三个概念:
TGC(ticket-granting cookie)
Service Ticket ( ST )
Ticket Granted Cookie ( TGC )
同时采用webflow实现流转。其相对来说,比较复杂。其本质还是基于过滤器。
由此我们可以看到xxl-sso的思想也是基于过滤器实现自己的增强。
我们可以回忆CAS的登录场景:
首先登录业务系统,或者登录一个父系统,从而进入到子系统。这个过程通常需要经历三个url的跳转:
业务系统的url
如果没有登录进行重定向跳转到认证中心
认证中心登录后,再跳回到业务系统的url
1.基于cookie的方案
1).进行业务系统登录,如果没有登录,则跳转到认证中心
2).进入到认证,通常单点登录系统需要配合统一授权系统使用,
也即做菜单权限的分配,将菜单的权限具体分配给到人。
3).持久化用户信息到数据库,进行菜单分配,进行权限控制,
通过APP进行用户信息采集。
4).经过单点登录认证。拿到用户信息,去认证中心认证。
2.基于token的方案
1).首先采集用户信息,持久化到数据库
2).通过账号和密码访问服务端的登录接口就可以拿到token
3).业务系统在拿到token后,可以基于token来进行访问自己想要访问的接口
4).此时可以将token信息放入到redis中,从而实现对token信息的存储。
5).同时可以对token进行续期
二、xxl-sso的架构图
可以看到在sso-server启动后,业务系统登录的时候,进行重定向到sso-server,携带sso sessionid进行访问。或者基于token的方案,进行操作。从架构图中可以看到这个重定向很重要。
三、实战操作
启动sso-server端
1.基于token访问
通过账号和密码访问服务端的登录接口就可以拿到token:
http://localhost:8080/xxl-sso-server/app/login?username=user&password=123456
{"code":200,"msg":null,"data":"1000_62003f860f954cf0a20d6824a01d1f9a"}
拿到token进行访问接口
http://127.0.01:8082/xxl-sso-token-sample-springboot/
可以对ip端口做域名映射,访问业务系统接口:
{
"code": 200,
"msg": null,
"data": {
"userid": "1001",
"username": "user1",
"plugininfo": null,
"version": "dcb4e801240545328d2c1ac691bf0f9c",
"expireMinute": 1440,
"expireFreshTime": 1674649196500
}
}
进行退出操作:
http://127.0.01:8082/xxl-sso-token-sample-springboot/logout
再次请求业务系统的接口:
http://127.0.01:8082/xxl-sso-token-sample-springboot
可以看到已经显示无效了。
2.基于cookie进行登录
首先需要做一个域名映射:
127.0.0.1 xxlssoserver.com
首先进行访问:
http://localhost:8081/xxl-sso-web-sample-springboot
进行拦截器会进行登录拦截
进行重定向:
http://xxlssoserver.com:8080/xxl-sso-server/login?redirect_url=http://localhost:8081/xxl-sso-web-sample-springboot/
进入认证中心,进行认证:
http://127.0.0.1:8081/xxl-sso-web-sample-springboot/?xxl_sso_sessionid=1000_06a1984b96a244a5927cdae2596e79bb
登录后,会跳转到成功页面:
http://localhost:8081/xxl-sso-web-sample-springboot/?xxl_sso_sessionid=1000_4be8c6cdaaa149b394636921d0d07a7d
【user】login success.
点击Logout 然后进行logout:
http://xxlssoserver.com:8080/xxl-sso-server/logout
然后就可以退出登录了。
从而跳转到登录页面:
http://localhost:8080/xxl-sso-server/login
以上就是两套方案请求的过程。
可以看到徐雪里老师还是很厉害的!
相关文章
- CAS单点登录(一)——初识SSO
- cas jwt 单点登录
- 单点登录SSO解决方案之SpringSecurity+JWT实现
- JWT单点登录(源码学习)
- php cas单点登录
- 单点登录实现原理(SSO)
- Java web实现简登录页面(MyBatis+jsp+servlet+html+css+javascript)附源码「建议收藏」
- 如何通过 OIDC 协议实现单点登录?[通俗易懂]
- linux登录root用户密码_centos7找回root密码
- Spring Cloud Security配置JWT和OAuth2的集成实现单点登录-示例
- Linux安全退出登录的正确方法(linux退出登录)
- PHP实现单点登录最简单的方法详解编程语言
- 实现安全性高效的单点登录:Redis技术解决方案(redis实现单点登录)
- Linux登录:获取最新信息(linux登录信息)
- Linux实现单点登录,实现系统安全(linux单点登录)
- 通过CMD登录Oracle数据库(cmd登录oracle)
- 如何简单易懂地登录mysql终端(登录mysql终端)
- Linux SSO单点登录:利用网站资源更便捷的登录方式(linuxsso)
- MySQL命令行登录实战技巧(mysql 命令行 登陆)
- 使用Redis搭建单点登录体系的指南(怎么用redis做sso)
- 使用Redis搭建安全的单点登录系统(用redis实现sso)
- 使用sso单点登录redis实现安全认证(sso单点 redis)
- 单点登录突破跨域界限利用Redis实现全局数据共享(单点登录跨域redis)
- 使用Redis实现高效的单点登录(单点登录用redis实现)
- 使用Redis实现单点登录安全保障(使用redis单点登录)
- 清空iislog中自己登录ip的vbs
- 在ASP.NET中实现单点登录