本发明涉及web应用,尤其涉及一种用户访问的单点认证鉴权方法、系统和介质。
背景技术:
1、随着业务的不断发展,创建的系统越来越多,若每个系统都有独立的用户认证鉴权机制,不仅增加了系统开发维护的工作量和开发成本高,而且多个系统之间的无法实现相互访问,给用户造成很差的使用体验,不利于不同业务系统之间协同工作。因此,基于keycloak技术平台已经提供的oidc实现,可以很好地实现单点登录的需求,尽管keycloak技术平台同时也提供了鉴权服务,如果全部采用keycloak技术平台提供的服务,则会高耦合,无法实现自定义的鉴权,另外,keycloak技术平台的结构隐晦、数量繁杂,导致未来数据迁移成为难题。
技术实现思路
1、本发明要解决的技术问题是:为了解决现有技术中全部采用keycloak技术平台提供的服务会高度耦合,无法实现自定义的鉴权的技术问题,本发明提供一种用户访问的单点认证鉴权方法,通过将前后端分离,能够实现自定义用户访问的认证和鉴权。
2、本发明解决其技术问题所采用的技术方案是:一种用户访问的单点认证鉴权方法,所述方法包括:
3、s1:登录页面被用户发起请求时,用户访问前先在前端服务进行登录,获取用户的access_token;
4、s2:在向后端服务访问时,在请求头上带上所述用户的access_token,后端服务通过对带上请求头的所述用户的access_token进行校验,实现单点认证;
5、s3:单点认证完成后,用户信息被保存在安全上下文中,并向统一用户平台发送用户权限查询请求,对当前用户进行访问鉴权控制。
6、进一步,具体地,所述s1包括:
7、s11:在所述前端服务中引入keycloak.js适配器,配置文件中写入 keycloak的请求参数,入口文件main.js集成所述keycloak的请求参数并初始化一个全局对象kc;
8、s12:在所述s11中获取一所述全局对象kc,根据所述全局对象kc的authenticated状态判断用户是否已登录;
9、若所述authenticated状态为true,用户已登录,则会将所述用户的access_token写入session中,获取所述用户的access_token;
10、若所述authenticated状态为false,用户未登录,则重定向至登录页面,等待用户重新请求登录,直至用户登录成功,刷新所述authenticated状态直至所述authenticated状态为true,再将所述用户的access_token写入所述session中,获取所述用户的access_token。
11、进一步,具体地,所述s2具体包括:
12、s21:用户在所述前端服务的登录页面登录完成,所有访问在所述后端服务的请求都会附带authorization请求头;
13、s22:所述后端服务获取authorization请求头的访问信息;
14、s23:所述后端服务内集成了keycloak适配器,在所述keycloak适配器中注册filter过滤器;
15、s24:所述filter过滤器解析附带authorization请求头中的authorization字段,获取用户的access_token;
16、s25:通过所述keycloak适配器内设置的adaptertokenverifier校验器对所述用户的access_token进行校验;
17、若校验通过,则请求被放行,完成单点登录认证,执行所述s3;
18、反之,若校验不通过,则直接返回未认证的响应,拒绝访问。
19、进一步,具体地,所述访问鉴权控制通过spring框架提供的handlerinterceptor接口实现,具体如下:
20、s31:根据所述安全上下文中的所述用户的登录信息,获取userid,结合所述userid的参数、以及当前业务系统的systemid参数,向统一用户平台发起查询用户权限的请求,所述请求中携带authorization请求头,获取的权限信息;
21、s32:在所述spring框架中自定义authzinterceptor鉴权访问拦截器,实现handlerinterceptor接口,覆写handlerinterceptor接口方法;
22、若请求类型是方法类型,则进入拦截器判断;
23、若请求类型不是方法类型,则放行请求;
24、s33:进入拦截器判断后,查询所述s31中的权限信息,判断当前用户是否拥有所述spring框架中的controller接口的访问权限;
25、若有,则放行请求,执行下一步;
26、否没有,则返回“访问被拒绝”响应,结束请求;
27、步骤34:拦截所述controller接口中的所有controller方法,校验请求的controller方法是否被@resource注解修饰过;
28、若请求的controller方法有被@resource注解修饰过,则继续执行下一步;
29、若请求的controller方法没有被@resource注解修饰过,则直接放行请求,通过授权;
30、s35:解析@resource注解属性的value值,与所述s31获取的权限信息进行匹配;
31、若不匹配,则访问被拒绝;
32、若匹配,则放行请求,通过授权。
33、进一步,具体地,所述统一用户平台采用rbac模型,进行角色访问控制,在执行所述s31前,所有的所述用户权限、所述角色和所述用户预先在所述统一用户平台正确配置。
34、进一步,具体地,所述用户信息还通过spi接口的方式动态加载到keycloak服务中。
35、进一步,具体地,使用mvn package命令构建所述keycloak服务和所述统一用户平台单点认证鉴权的依赖包。
36、一种采用如上所述的用户访问的单点认证鉴权方法的鉴权系统,所述鉴权系统包括:
37、登录单元,登录页面被用户发起请求时,用户访问前先在前端服务进行登录,获取用户的access_token;
38、认证单元,与登录单元连接,在向后端服务访问时,在请求头上带上所述用户的access_token,后端服务通过对带上请求头的所述用户的access_token进行校验,实现单点认证;
39、鉴权单元,与认证单元连接,单点认证完成后,用户的登录信息被保存在安全上下文中,并向统一用户平台发送用户权限查询请求,对当前用户进行访问鉴权控制。
40、一种介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的用户访问的单点认证鉴权方法。
41、本发明的有益效果是,本发明的用户访问的单点认证鉴权方法,通过前端keycloak服务用于单点登录认证,后端服务的统一用户平台用于鉴权访问,实现了前后端分离,将keycloak服务和统一用户平台配合使用,在不同业务系统单点认证鉴权能够统一实现,便于协同工作,实现了用户、角色和权限的统一集中管理,相对于现有技术,不需要每个系统单独建立一个账号,而且打破了各个业务系统的访问壁垒,实现了一个账号可以处处访问的效果。