前言:
1.公司有多个项目组,每个项目组做不同的系统(应用),每个应用都相当于oauth中的一个client
2.登陆页面项目组可以根据自己的风格设计登陆页,但都访问同一个登陆接口
3.用户登陆获取到的token与应用token需要分开(用户有的权限应用不一定有,应用有的权限用户不一定有)
需求:
1.登陆:
1.1:用户访问某一个系统界面时判断是否携带有效token,没有则跳转至登陆界面,url上拼接登陆成功的跳转地址及client_id(这里与oauth2客户端模式不同不需要携带client_secret)
1.2:登陆常规校验及同时校验client_id是否与请求来源的域名匹配
1.3:登陆成功则记录当前用户是通过那个系统登陆的
2.服务端认证
2.1:因每个项目组的应用都会提供一些开放接口给其他项目组使用。如【OA服务】需要向【考勤服务】查询数据,则需使用【OA服务】的client_id和client_secret生成token进行访问且需要校验是否有权限去访问【考勤服务】
疑问点:
1.用户访问界面时,是否是由服务端的判断没有token则重定向登陆页面,还是返回状态码由前端跳转至登陆界面。 这两种情况如何把client_id给到前端让其登陆时传给服务端
2.只使用spring security能否实现以上需要,还是需要接入spring authorization server等框架。
3.但接入spring authorization server框架在登陆时是否可以不传client_secret
好晕
其实就是看第一点就决定用什么,公司有多个项目组,每个项目组做不同的系统(应用),每个系统是不是用的不同用户,如果每套系统用的是不同用户,那就是用
spring authorization server
, 如果都用的是同一个用户,那就是spring security
疑问点:
1:
client_id
本来就是一开始就知道的,是一个固定的呀。2:就我上面说的,
3:你还是先了解一下
spring authorization server
,这个例子,你git下来跑一次应该能大致理解,https://github.com/spring-projects/spring-authorization-server/tree/main/samples#demo-sample