前言:
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
1. 用户访问界面时,如何传递 client_id
在前后端分离的应用中,当用户访问某个系统界面时,如果未携带有效token,后端可以返回一个状态码(如401 Unauthorized)以及一个包含client_id
的跳转链接或者是在响应的header中设置Location
重定向的URL(包含client_id
)。前端接收到这个状态码或响应后,会进行逻辑判断并自动跳转到登录页面,同时带上这个client_id
参数。
2. 是否只使用Spring Security就能实现上述需求
Spring Security可以处理用户的身份验证和授权,但是它本身并不直接支持OAuth 2.0的全部特性,特别是关于客户端认证的部分。Spring Security OAuth2 Client是一个扩展模块,但它已经被标记为不再推荐使用,因为Spring Security 5.x及以后版本推荐使用Spring Security 5 OAuth2 Login和Spring Authorization Server。
要完整地实现OAuth 2.0的认证和授权流程(包括客户端认证),你可能需要结合使用Spring Security和Spring Authorization Server(或者一个外部的OAuth 2.0授权服务器,如Keycloak、Okta等)。
3. 接入Spring Authorization Server时是否可以不传client_secret
在OAuth 2.0的客户端认证流程中,client_secret
是一个敏感信息,用于验证客户端的身份。在标准的OAuth 2.0流程中,当客户端(如你的OA服务)需要获取访问令牌(access token)时,通常需要提供client_id
和client_secret
。
然而,对于前端应用(如SPA,Single Page Application),出于安全考虑,通常不会将client_secret
存储在前端代码中。对于这些情况,OAuth 2.0提供了其他授权流程(如授权码流程、隐式流程等),这些流程允许前端应用在不使用client_secret
的情况下安全地获取访问令牌。
但是,对于你的后端服务之间的通信(如OA服务向考勤服务请求数据),使用client_id
和client_secret
进行客户端认证是常见的做法,以确保请求的来源是可信的。因此,在这些情况下,你需要提供client_secret
。
client_secret
是一个敏感信息,需要妥善保管和使用。对于前端应用,通常不会使用client_secret
;但对于后端服务之间的通信,使用client_id
和client_secret
进行认证是常见的做法。本文向大家介绍Springboot如何实现Web系统License授权认证,包括了Springboot如何实现Web系统License授权认证的使用技巧和注意事项,需要的朋友参考一下 在我们做系统级框架的时候,我们要一定程度上考虑系统的使用版权,不能随便一个人拿去在任何环境都能用,所以我们需要给我们系统做一个授权认证机制,只有上传了我们下发的lic文件并验证通过,才能正常使用,下面就开始一步一步实
本文向大家介绍VUE+node(express)实现前后端分离,包括了VUE+node(express)实现前后端分离的使用技巧和注意事项,需要的朋友参考一下 vue作为前端的框架,node(express)作为后端的框架。无数据库,使用端口保存数据。 VUE: 使用vue-cli构建vue项目(vueapp)。 axios:(与ajax相似) axios没安装的记得装一下。(安装不细说) nod
前后端分离 在B/S架构的环境中,前后端分离一直都众说纷纭,没有一个标准。我觉得打开可以分为三个阶段: 传统的分离方法 传统意义上的前后端分离,前端指的是美工、切图、设计,后端是实现代码、数据库相关的实现。美工设计和生成的前端页面,给到程序员来做集成。那么这里其实就不分什么前后端了,程序员从数据库一直搞到前端页面的样式,就是“全能型运动员“。当然,一般传统上的开发协作模式有两种: 一种是前端先写一
ModStart:系统是前后端分离的吗?
前端使用vue,后端使用springboot,前后端分离,且已解决跨域,登录采用jwt验证 想实现功能:如果用户通过url栏输入地址方式来访问某个页面(非登录页),对未登录用户自动跳转登录页面 请问拦截器是设置在后端还是设置在前端?另外对于静态页面能拦截吗
1. 前言 目前,使用 Spring Boot 进行前后端分离项目开发,应该是主流做法了。这种方式,在开发、测试阶段,都比较方便。 开发阶段,项目组定义好接口规范后,前端按规范开发前端页面,后端按规范编写后端接口,职责分明。 测试阶段,后端是独立项目,可以进行单元测试。前端可以随时使用最新版本的后端程序进行实际测试。 前后端分离的模式,有着很多的优越性,所以造就了它的流行。 2. 技术选型 本篇我