认证平台优化方案

一、当前逻辑

当前情况:
  • 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