SSO单点登录&OAuth2&JWT&SpringSecurity

前提

浏览器携带某些信息,比如cookie、token

限制

1)cookie不能跨域;
2)token可以放在请求头

实现功能

同一设备下登录A应用,成功登陆后,访问同一集团下的B应用免登录

抽象

客户端复杂,抽象成每次请求都携带特定信息,比如cookie或者token,不一定是http协议
应用A的某些功能需要用户登录,应用B的某些功能也需要用户登录,应用A和应用B是同一集团的,需要实现在任意一个应用成功登录后,访问其他应用免登录

实现方案

本质是要获取信息后怎么认证用户是否登录成功
1)无状态
客户端的信息就能证明用户是否登录,比如JWT
2)有状态
客户端的信息只是一个关键字,每个应用需要根据这个关键字去判断用户是否登录成功,可以用分布式Session比如Redis+SpringSession,这个方案的缺点很明显,就是可能不同的应用都维护着相同的登录功能代码,所以出现了第三方认证中心来实现解耦,比如CAS框架或者xxl-sso框架。或者是自己根据OAuth2的原理来实现单点登录,可以用SpringSecurity框架来实现

总结

1)单点登录一般是作为基础设施来实现的,其他应用根据API接入使用即可;
2)应用是否需要接入单点登录需要视业务需求而定,如果不考虑接入吗,只能是在应用本地编写登录等认证代码;

你可能感兴趣的:(分布式,java)