等保合规要求下数字档案馆系统身份认证优化实操指南

前置准备与依赖说明

本方案针对主流Java SpringBoot架构的数字档案馆系统改造,零额外成本,符合等保三级对身份认证的要求,所有步骤可直接照搬落地,改造时长不超过2小时。

开始改造前请确认满足以下条件:

  • 已正常部署运行的数字档案馆系统,有数据库读写权限
  • 服务器为CentOS 7+系统,开放4000端口用于认证服务
  • 拥有系统前端、后端代码的修改权限

第一步:工具安装与基础配置

1.1 安装依赖拉取代码

直接在数字档案馆所在服务器执行以下命令,一步完成依赖安装和代码拉取:

``` yum install -y java-11-openjdk-devel git wget git clone https://gitee.com/oschina/totp-auth.git /opt/totp-auth cd /opt/totp-auth ```

如果服务器无法访问外网,可提前在本地下载代码压缩包,上传到/opt/totp-auth目录即可。

1.2 完整配置文件修改

打开项目根目录的application.yml,替换成以下可直接运行的配置,修改对应参数即可:

``` server: port: 4000 servlet: context-path: /auth spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://<你的数据库地址>:3306/<数字档案馆库名>?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: <你的数据库账号> password: <你的数据库密码> jwt: secret: <自定义32位密钥,示例:da12sf45gh67jk89mn01pq23wx45yz67> expiration: 28800 totp: issuer: <单位名称>数字档案馆 ```

修改完成后,执行以下命令打包项目:

``` chmod +x mvnw ./mvnw clean package -DskipTests ```

第二步:数据库与原系统改造

2.1 新增用户表字段

直接执行以下SQL,修改数字档案馆的用户表,新增多因子认证密钥存储字段:

``` ALTER TABLE `user` ADD COLUMN `totp_secret` varchar(64) DEFAULT NULL COMMENT '多因子认证密钥'; ```

2.2 后端登录接口改造

等保合规要求下数字档案馆系统身份认证优化实操指南

原登录流程修改为「账号密码校验→多因子认证→签发令牌」,核心改造代码如下,直接替换原登录接口逻辑:

``` // 第一步:校验基础账号密码 User user = userMapper.selectByUsername(username); if (!passwordEncoder.matches(rawPassword, user.getPassword())) { return Result.error("账号或密码错误"); } // 第二步:校验账号状态 if (user.getStatus() != 1) { return Result.error("账号已停用,请联系管理员"); } // 第三步:检查是否已绑定多因子 if (org.springframework.util.StringUtils.isEmpty(user.getTotpSecret())) { // 生成绑定二维码返回给前端 String qrCode = totpService.generateBindQr(user.getId(), user.getUsername()); return Result.ok("needBind", qrCode); } // 第四步:验证动态验证码 if (!totpService.verifyCode(user.getTotpSecret(), inputCode)) { return Result.error("动态验证码错误"); } // 验证通过,签发JWT令牌 String token = jwtUtils.generateToken(user.getId()); // 更新最近登录IP userMapper.updateLastLoginIp(user.getId(), getClientIp(request)); return Result.ok(token); ```

2.3 前端改造

在原登录页的密码输入框下方,新增一行动态验证码输入框,提示文字设置为「请输入Google Authenticator中的动态码」,长度限制为6位。新增绑定弹窗,用于未绑定用户扫码绑定,弹窗内显示后端返回的二维码,新增绑定按钮完成密钥存储即可。

第三步:启动与调试上线

3.1 启动认证服务

执行以下命令后台启动认证服务,配置防火墙开放端口:

``` nohup java -jar /opt/totp-auth/target/totp-auth.jar & firewall-cmd --add-port=4000/tcp --permanent firewall-cmd --reload ```

3.2 Nginx反向代理配置

在原数字档案馆的Nginx配置文件中,新增以下转发规则,把登录请求转发到新的认证服务:

``` location ~ /login/ { proxy_pass http://127.0.0.1:4000/auth; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ```

修改后执行nginx -s reload重载配置即可。

3.3 上线前检查清单

  • ✅ 所有管理员账号已完成多因子绑定测试,登录正常
  • ✅ 错误动态码、停用账号、过期令牌都能返回正确错误提示
  • ✅ 数据库totp_secret字段已成功创建
  • ✅ JWT密钥已修改为自定义的随机字符串,没有使用示例密钥

可选增强优化(针对高安全需求场景)

如果需要更高的安全等级,可以增加异地登录二次认证,在密码校验通过后新增以下逻辑:

``` // 对比当前IP和上次登录IP所在区域 String currentRegion = getIpRegion(getClientIp(request)); String lastRegion = getIpRegion(user.getLastLoginIp()); if (!currentRegion.equals(lastRegion)) { // 发送短信验证码到用户绑定手机,要求二次验证 String smsCode = generateSmsCode(); sendSms(user.getPhone(), "你的数字档案馆异地登录验证码为:" + smsCode); return Result.ok("needSmsVerify", smsCode); } ```

改造完成后,原系统的身份认证安全等级满足等保合规要求,解决了单密码认证泄露风险,所有改造基于开源工具,无需额外采购成本。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统