APP下载

按钮级权限管理与统一认证系统设计与实现

2024-09-04付越张传国

电脑知识与技术 2024年20期

关键词:权限管理;统一认证;RBAC;OAuth 2;信息系统

0 引言

随着信息技术的不断发展,机构内部应用系统的数量和复杂性不断增加,功能日益复杂,涉及的用户角色也越来越广泛。在这些系统中,对用户权限的统一化、精细化管理,保障系统安全性和数据完整性成为亟待解决的问题[1]。

传统的权限管理系统要求开发者手动处理每个资源的访问控制,缺乏对多应用权限的统一管理,使得工程处理非常烦琐且效率低下,导致延长开发周期,增加开发成本。用户需要在多个系统中重复登录,导致用户体验不佳且存在安全隐患。系统之间的权限认证和用户信息同步存在障碍,影响了企业内部信息流畅度和工作效率。

为解决上述问题,本文基于角色的访问控制模型(Role-Based Access Control,简称RBAC) [2],使用Spring Security、OAuth2、JWT等技术框架,设计研发了面向多应用的按钮级权限管理与用户统一认证系统。该系统旨在为机构提供一种统一、灵活、高效的权限管理与用户认证解决方案。开发者可通过配置方式实现对系统级、菜单级、按钮级等资源的访问控制,根据具体业务需求精确控制用户对系统功能的访问权限,有效降低潜在的安全风险,并提高机构内部应用系统的安全性和管理效率。同时,系统实现了用户在多个系统中的单点登录与不同系统间的权限认证和用户信息同步[3],提高用户体验和工作效率,确保企业内部信息的安全性和一致性。

1 系统整体设计

该系统采用Spring Security、JWT、OAuth2等技术架构组件,使用MySQL作为数据存储服务器,Redis作为缓存数据服务器;与业务系统通过API方式进行权限验证,系统的整体业务架构如图1所示。本文的论述重点是多业务系统的按钮级权限管理以及用户统一认证功能的实现。结合图1,下面分别对权限管理与用户统一认证的流程进行阐述。

1.1 用户统一认证

1) 业务系统前端请求业务系统后端接口,业务后端拦截请求,调用系统中认证模块接口进行权限检查。如发现token无效或已过期,返回未登录信息给业务后端,业务后端将信息返回给业务前端,业务前端携带应用信息(如:client_id、response_type、redi⁃rect_uri) 跳转到系统的统一登录界面。

2) 进入统一认证登录界面后,登录页自动在re⁃quest header 中携带tokenForCode 请求授权码接口。

初次登录用户须在登录页输入用户名/密码,登录页再次发送请求到系统后端。后端校验clientId是否存在、用户名/密码是否正确、当前用户是否被允许访问当前client_id的应用。认证通过会生成一个授权码code,同时在response header中返回一个tokenForCode 用于维持用户名/密码的登录状态[4]。登录页将token⁃ForCode保存下来以备其他业务系统自动登录,同时,将code拼接到redirect_uri中并重定向回redirect_uri。

3) 登录认证通过后回到业务系统redirect_uri,业务系统取出code 并携带client_id、code 值、grant_type 向业务系统后端申请token。业务系统后端将接收的参数以及保存在后端的client_secret拼接到URL中,向系统认证模块申请token。

4) 系统后台校验code有效性(仅可使用1次)、cli⁃ent_id和client_secret。校验通过则签发JWT token(to⁃ken payload里声明了username、user_uuid、client_id、当前token可访问的业务系统集合aud字段等信息)。

5) 业务后端接收到系统认证模块签发的token并返回给业务前端,业务前端获取token后进行业务接口调用,业务后端拦截请求,向系统认证模块请求进行token校验、权限检查。

6) 业务系统B前端请求对应后端接口,其后端同样拦截请求,向系统认证模块进行token校验、权限检查,返回未登录信息。该业务后端接收到信息返回给业务B前端,业务B前端重定向到系统登录界面。由于业务系统A 已经登录,登录页自动携带token⁃ForCode 请求code,同时重定向回业务系统B 前端。业务B无须输入用户名/密码即完成了登录过程,获取到授权码code,后续完成与业务A相同的其他流程。

1.2 权限管理

1) 业务系统后端拦截业务前端界面请求,获取当前请求的地址(例如/user/search) 和HTTP 方法http⁃Method(POST) 。后端查询获取被访问接口在系统权限管理模块注册的资源ID resourceId(例如:dciiadmin-server) 和access_token,请求系统权限管理模块权限验证接口。

2) 系统权限管理模块根据resourceId查询出当前业务系统的路径匹配规则集,找到当前接口的认证规则authentication_type。若当前接口不鉴权(authentica⁃tion_type为anonymous) ,则直接通过权限检查;若需要鉴权则取出请求头里的access_token,校验token是否被篡改[5],解析其中声明的信息(例如:username、aud、authorities) 。

3) 根据username查询缓存数据库Redis。如查询结果为空,则当前token已过期;如有值且两个token相等,则表示token可用,同时将当前token有效期自动延期。如声明信息中有aud字段,且传来的resour⁃ceId与aud字段值不相等,则返回权限不足提示。

4) 系统权限管理模块提供按钮权限获取接口。业务系统在前端界面初始化时调用此接口,鉴权通过后,按钮获取接口会返回业务系统当前界面的按钮显示信息。

2 系统功能设计与实现

本系统的功能设计采用基于角色的访问控制模型(RBAC) 。在微服务架构下,应用Hibernate框架嵌入SpringBoot框架中,同时应用Spring Security+JWT实现系统的权限管理功能,应用OAuth框架实现系统的用户统一认证功能。系统将用户关联角色,角色关联权限,权限关联应用资源,从而实现赋予用户相应资源的权限[6]。如图2所示,本系统由用户管理、角色管理、权限管理、应用管理、统一认证等模块组成。

2.1 应用管理

应用指接入该系统的其他业务系统。应用管理功能包括应用列表、添加编辑应用、页面管理、按钮管理、接口管理等功能。

应用列表展示接入该系统的其他业务系统信息。用户可通过应用列表查看和编辑应用详细信息,设置应用图标、应用状态,获取应用ID、访问密钥,配置应用前后端访问路径。如图3所示。

用户完成应用注册后,可通过页面管理和接口管理分别配置相关的页面和接口信息。页面管理功能支持手动添加和JSON导入两种方式添加应用下的页面资源信息,同时提供编辑和下载原始JSON的功能。页面信息包括id、path、name、component、redirect、meta 等属性,前端框架通过获取页面信息组织页面的层级结构。当前端已根据需求将各种组件组成应用后,需要将系统组件映射到路由上,而这些页面信息即为组成路由表的关键属性。

在大多数后台管理系统中,都需要导航菜单对页面进行导航。因此,路由表不仅决定了系统页面的映射关系,还控制着菜单的排列顺序和层级结构。此外,通过接收路由元信息meta属性,可实现将任意信息附加到路由上,如菜单名称、菜单图标等。页面管理如图4所示。

页面结构配置完成后,用户可以通过按钮管理功能配置页面中的按钮信息。按钮配置信息包括编码、说明,前端应用通过编码信息定位页面中的按钮。如图5所示。

页面信息配置完成后,用户可通过接口管理功能设置应用下的接口信息。接口信息包括所属应用、匹配规则、规则说明、HTTP方法、认证类型以及排序等信息。服务端应用通过接口信息匹配被访问的接口,服务端对用户接口权限的鉴权见系统整体设计中的权限管理部分。

2.2 权限管理

权限管理用于实现业务系统应用功能的合理有序组合。权限管理功能包括权限列表、添加编辑权限、页面权限、按钮权限、接口权限。权限列表展示系统中的全部权限信息,并提供新增编辑权限入口。

页面权限管理通过应用设置的页面结构,为用户提供设置页面在某一权限下是否可见的功能。按钮权限管理则通过页面中设置的按钮信息,来设置按钮在某一权限下是否可见。如图6所示。

接口权限管理通过应用设置的API信息,提供用户设置接口在某一权限下是否有权访问以及鉴权方式。如图7所示。

2.3 角色管理

角色是对权限的组合,通过设置用户角色实现对用户的权限授予[7]。角色管理功能包括角色列表、添加角色、权限设置。角色列表展示系统中的全部角色信息,并提供新增编辑角色入口。

在角色管理中设置权限时,系统分为页面权限和接口权限两部分。页面权限设置专注于业务系统的功能界面、按钮的访问控制设置。接口权限以单个API为粒度设置某一角色下接口的访问控制。

2.4 用户管理

用户管理提供用户信息的展示,用户注册、编辑、禁用功能。在用户注册时,系统管理员可根据用户需求设置用户角色,角色可以是单一角色,也可以是多个角色。用户注册时提供的用户名、手机号码、邮箱均可作为登录系统时的用户账号。

2.5 统一认证

用户统一认证包括登录配置和用户登录界面。在登录配置模块,用户可以配置系统的登录界面。配置完成后,通过地址访问用户登录界面,输入用户信息后,经过系统的统一认证完成用户登录操作[8]。统一认证的详细过程见系统整体设计中的统一认证模块。

3 结论

本系统基于RBAC 模型,结合Spring Security、OAuth2、JWT等技术框架,设计并实现了面向多应用的按钮级权限管理与用户统一认证系统。通过统一管理用户权限,实现了对系统级、菜单级、按钮级等资源的精细化访问控制,提高了系统的安全性和管理效率。同时,实现了用户在多个系统中的单点登录与权限认证、用户信息同步,优化了用户体验和工作效率。本系统为机构提供了一种统一、灵活、高效的权限管理与用户认证解决方案,为信息系统的安全和发展提供了有力支持。