认证平台优化方案
一、当前逻辑
当前情况:
- 1、当前 Cas 认证服务组件陈旧,漏洞较多,存在安全风险
- 2、当前 Cas 认证服务不能同时满足 PC 端、H5 端 不同身份的登录,会出现信息缓存混乱的情况
一、优化方案
1、方案描述:
近期计划(3d):
- 1、后端对现有认证逻辑进行改造,新增 platform 参数,依此参数判断不同平台,区分缓存
- 2、前端配置对 综合评价(SaaS、滨江项目、婺城项目、上城项目、拱墅项目)所有的对接进行逻辑调整,新增 platform 参数
长期计划(3周):
- 1、基于最新的 Cas 开源服务整合现有的代码,实现新的认证服务,解决低版本,漏洞较多和安全风险问题
- 2、新服务要把集群能力调通,解决认证服务单节点压力问题,提高高可用能力
- 3、同时把已有的 OAuth 2.0 能力完善起来,返回统一的JWT和用户信息,
- 4、与前端进行联调,把内部系统改用OAuth 2.0 对接
1.1、交互功能
- 认证界面,改为根据子系统传递的参数,决定显示的标题、背景图等
- 增加 账号密码登录、二维码登录、钉钉登录、微信登录、魔方登录、浙政钉登录的入口
1.2、逻辑流程
- 账号密码登录
- 二维码登录
- 钉钉登录
- 微信登录
- 魔方登录
- 浙政钉登录
1.3、业务流程
- 账号密码登录
- 二维码登录
- 钉钉登录
- 微信登录
- 魔方登录
- 浙政钉登录
2、数据库设计:
支持多种登录方式的用户体系:
/*
* 权限核心表:
* 2、用户信息表、角色信息表、用户-角色关系表、角色-权限关系表(角色-菜单-按钮)、
*/
-- ----------------------------
-- Table structure for sys_role_list
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_list`;
CREATE TABLE `sys_role_list`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色id',
`xxdm` varchar(20) DEFAULT NULL COMMENT '学校代码',
`key` varchar(50) NOT NULL COMMENT '角色编码',
`name` varchar(50) NOT NULL COMMENT '角色名称',
`type` int(1) NOT NULL COMMENT '角色类型(1:原生|2:继承|3:复制|4:自定义)',
`intro` varchar(1000) NOT NULL COMMENT '角色简介',
`status` int(1) NOT NULL DEFAULT '1' COMMENT '角色状态(0:禁用|1:可用)',
`is_delete` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除,1:已删除)',
`creator` bigint(20) DEFAULT '0' COMMENT '创建人ID',
`create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyer` bigint(20) DEFAULT NULL COMMENT '修改人ID',
`modify_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY (`key`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='角色信息表';
-- ----------------------------
-- Table structure for sys_role_perms
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_perms`;
CREATE TABLE `sys_role_perms`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`role_id` bigint(20) NOT NULL COMMENT '角色id',
`role_key` varchar(64) DEFAULT NULL COMMENT '角色编码',
`perms` varchar(50) NOT NULL COMMENT '权限标记:(等同sys_feature_opts.opt_perms)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_id` (`role_id`, `perms`) USING BTREE COMMENT '角色权限索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='角色-权限关系表(角色-菜单-按钮)';
-- ----------------------------
-- Table structure for sys_authz_account
-- ----------------------------
DROP TABLE IF EXISTS `sys_authz_account`;
CREATE TABLE `sys_authz_account`(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`type` varchar(50) COMMENT '登录方式(如:password:账号密码、weixin:微信登录...)',
`account` varchar(100) NOT NULL COMMENT '账号名称',
`password` varchar(100) DEFAULT NULL COMMENT '账号密码(三方登录可为空)',
`salt` varchar(64) DEFAULT NULL COMMENT '账号密码盐:用于密码加解密',
`secret` varchar(128) DEFAULT NULL COMMENT '账号秘钥:用于用户JWT加解密',
`raw_data` varchar(500) COMMENT '第三方认证账号扩展信息',
`user_id` bigint(20) COMMENT '关联用户id',
`user_code` varchar(50) COMMENT '关联用户code(短号/工号)',
`app_id` varchar(50) DEFAULT NULL COMMENT '账号最近一次登录客户端应用id',
`app_channel` varchar(20) DEFAULT NULL COMMENT '账号最近一次登录客户端应用渠道编码',
`app_version` varchar(20) DEFAULT NULL COMMENT '账号最近一次登录客户端版本',
`status` tinyint(2) DEFAULT NULL COMMENT '账号状态(0:禁用|1:可用|2:锁定)',
`is_delete` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除,1:已删除)',
`creator` bigint(20) DEFAULT '0' COMMENT '创建人ID',
`create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyer` bigint(20) DEFAULT NULL COMMENT '修改人ID',
`modify_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user` (`type`, `account`, `user_id`, `user_code`) USING BTREE COMMENT '用户账号索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户账户信息表';
-- ----------------------------
-- Table structure for sys_authz_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_authz_user`;
CREATE TABLE `sys_authz_user`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`code` varchar(50) COMMENT '用户code(短号/工号)',
`nickname` varchar(50) DEFAULT NULL COMMENT '用户昵称',
`avatar` varchar(500) DEFAULT NULL COMMENT '用户头像:图片路径或图标样式',
`xxdm` varchar(20) DEFAULT NULL COMMENT '学校代码',
`id_type` int(1) DEFAULT '1' COMMENT '证件类型 1 身份证 2护照 3港澳 4台湾 5 外国人居留证',
`id_card` varchar(20) DEFAULT NULL COMMENT '证件号码',
`phone` varchar(11) DEFAULT NULL COMMENT '手机号码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱地址',
`gender` smallint(2) DEFAULT NULL COMMENT '性别:(1:男,2:女)',
`region_code` varchar(20) DEFAULT NULL COMMENT '用户位置:国家/地区编码',
`wgs84_lng` decimal(10, 6) DEFAULT NULL COMMENT '用户位置:wgs84经度',
`wgs84_lat` decimal(10, 6) DEFAULT NULL COMMENT '用户位置:wgs84纬度',
`degree` tinyint(2) DEFAULT '0' COMMENT '用户信息完成度',
`app_id` varchar(50) DEFAULT NULL COMMENT '注册客户端应用id',
`app_channel` varchar(20) DEFAULT NULL COMMENT '注册客户端应用渠道编码',
`app_version` varchar(20) DEFAULT NULL COMMENT '注册客户端版本',
`status` tinyint(2) DEFAULT '1' COMMENT '用户状态(0:禁用|1:可用)',
`is_delete` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除,1:已删除)',
`creator` bigint(20) DEFAULT '0' COMMENT '创建人ID',
`create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyer` bigint(20) DEFAULT NULL COMMENT '修改人ID',
`modify_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user_profile` (`code`, `nickname`) USING BTREE COMMENT '用户详情索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户详情信息表';
-- ----------------------------
-- Table structure for sys_authz_user_identity
-- ----------------------------
DROP TABLE IF EXISTS `sys_authz_user_identity`;
CREATE TABLE `sys_authz_user_identity`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
`identity_id` int(1) DEFAULT NULL COMMENT '身份类型(1:系统管理员、2:学校管理员、3:普通老师、4:学生、5:家长、6:开发者、7:访客)',
`info_id` bigint(20) DEFAULT NULL COMMENT '教师id/学生id',
`priority` int(2) NOT NULL DEFAULT 0 COMMENT '优先级:用于默认身份',
`xxdm` varchar(20) DEFAULT NULL COMMENT '学校代码',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user_identity` (`user_id`, `identity_id`, `info_id`, `priority`) USING BTREE COMMENT '用户身份索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户身份信息表';
-- ----------------------------
-- Table structure for sys_authz_user_roles
-- ----------------------------
DROP TABLE IF EXISTS `sys_authz_user_roles`;
CREATE TABLE `sys_authz_user_roles`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`user_id` bigint(20) NOT NULL COMMENT '用户id',
`role_id` bigint(20) NOT NULL COMMENT '角色id',
`priority` int(2) NOT NULL DEFAULT 0 COMMENT '优先级:用于默认登录角色',
`is_delete` tinyint(2) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除,1:已删除)',
`creator` bigint(20) DEFAULT '0' COMMENT '创建人ID',
`create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`modifyer` bigint(20) DEFAULT NULL COMMENT '修改人ID',
`modify_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_role` (`user_id`, `role_id`, `priority`) USING BTREE COMMENT '用户角色关系索引'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='用户-角色关系表';
3、任务拆分:
- 交互功能设计【1d】
- 交互功能UI布局,现有逻辑,支持按参数调整【2d】
- 近期计划(3d):
- 满足 PC 端、H5 端 不同身份的后端登录逻辑改造
- 长期计划(3周):
- 基于最新的 Cas 代码整合现有的代码,实现新的认证服务,解决低版本,漏洞较多和安全风险问题(7d)
- 新服务要把集群能力调通,解决认证服务单节点压力问题,提高高可用能力(3d)
- 同时把已有的 OAuth 2.0 能力完善起来,返回统一的JWT和用户信息(1d)
- 与前端进行联调,把内部系统改用OAuth 2.0 对接(3d)
- 测试参与认证功能测试,性能测试(2d)
作者:杭州天音 创建时间:2025-02-17 19:05
最后编辑:杭州天音 更新时间:2025-06-09 11:42
最后编辑:杭州天音 更新时间:2025-06-09 11:42