登录与安全策略设计文档
1. 系统总体架构
1.1 系统组成
登录与安全策略系统
├── 认证服务层 (Authentication Service Layer)
│ ├── 登录策略体系 (Login Strategy System)
│ └── 安全验证体系 (Security Validation System)
├── 安全策略服务层 (Security Policy Service Layer)
├── 用户服务层 (User Service Layer)
├── 会话管理层 (Session Management Layer)
└── 网关服务层 (Gateway Service Layer)
1.2 核心设计理念
- 策略模式 - 支持多种登录方式的灵活扩展
- 责任链模式 - 安全策略的链式验证
- 模板方法 - 标准化的登录流程
- 配置驱动 - 动态可配置的安全策略
2. 数据库设计
2.1 核心数据表
sys_user (用户表)
- 存储用户基本信息和认证凭证
- 支持多租户隔离 (business_id)
- 包含密码加密策略字段
sys_security_policy (安全策略表)
- 支持6大策略类型:IP限制、设备限制、密码策略、登录限制、会话策略、时间限制
- 策略可动态启用/禁用
- 支持优先级配置和租户隔离
辅助数据表
- sys_login_log - 登录审计日志
- sys_user_device - 用户设备绑定
- sys_password_history - 密码历史记录
3. 登录策略体系设计
3.1 登录策略 (LoginStrategy)
核心职责
- 定义标准
登录流程模板 - 集成安全策略验证链
- 提供通用验证工具方法
- 统一异常处理和日志记录
模板方法流程
1. 前置参数校验 (preVerify)
2. 加载安全策略配置
3. 前置安全校验 (preValidate)
4. 查找用户信息 (findUser - 抽象方法)
5. 检查用户状态
6. 具体登录验证 (doLogin - 抽象方法)
7. 记录登录日志
8. 后置安全校验 (postValidate)
9. 构建登录结果
10. 异常处理和清理
3.2 具体登录策略实现
AccountPasswordLoginStrategy (账号密码登录)
- 用户查找:基于账号查询用户
- 验证逻辑:密码加密验证
- 特殊处理:密码策略合规性检查
MobileLoginStrategy (手机号登录)
- 用户查找:基于手机号查询用户
- 验证逻辑:短信验证码验证
- 特殊处理:验证码频率限制
EmailLoginStrategy (邮箱登录)
- 用户查找:基于邮箱查询用户
- 验证逻辑:邮箱验证码验证
- 特殊处理:验证链接生成
SocialLoginStrategy (社交登录)
- 用户查找:第三方用户ID映射
- 验证逻辑:OAuth2.0认证
- 特殊处理:自动注册流程
4. 安全策略验证系统设计
4.1 安全验证链 (SecurityValidatorChain)
验证阶段划分
前置验证阶段 (Pre-Validation)
- IP地址限制验证
- 时间限制策略验证
- 验证码触发检查
- 基础安全策略检查
后置验证阶段 (Post-Validation)
- 设备限制验证
- 会话策略验证
- 登录频率限制
- 深度安全策略检查
失败处理阶段 (Failure Handling)
- 失败次数统计
- 账户锁定处理
- 安全事件上报
- 恢复机制触发
4.2 六大安全策略模块
4.2.1 IP限制策略 (IP_RESTRICTION)
- 功能配置:
-
- enable_whitelist: 启用IP白名单
-
- enable_blacklist: 启用IP黑名单
-
- ip_whitelist: IP白名单列表
-
- ip_blacklist: IP黑名单列表
- 验证逻辑:
-
- 检查白名单:如果启用且IP不在白名单中 → 拒绝
-
- 检查黑名单:如果启用且IP在黑名单中 → 拒绝
-
- 记录IP访问日志
4.2.2 设备限制策略 (DEVICE_RESTRICTION)
- 功能配置:
-
- enabled: 启用设备限制
-
- max_devices:
最大设备数量
- max_devices:
- enable_device_binding: 启用设备绑定- allowed_device_types: 允许的设备类型- blocked_device_types: 阻止的设备类型- 验证逻辑:
-
- 设备类型检查:验证设备类型是否允许
-
- 设备数量检查:验证是否超过最大设备数
-
- 设备绑定检查:验证设备是否已绑定
-
- 新设备注册:自动绑定新设备
4.2.3 密码策略 (PASSWORD_POLICY)
密码策略功能配置表
| 配置项 | 配置键名 | 数据类型 | 默认值 | 配置说明 |
| 启用密码策略 | enabled | Boolean | false | 是否启用密码策略功能 |
| 密码最小长度 | min_length | Integer | 8 | 密码最小长度要求 |
| 密码复杂度等级 | complexity_level | Integer | 2 | 密码复杂度等级:1-低,2-中,3-高 |
| 密码过期天数 | expire_days | Integer | 90 | 密码过期天数,0表示永不过期 |
| 防止密码重用 | prevent_reuse | Boolean | false | 是否防止密码重复使用 |
| 密码历史记录数 | reuse_history_count | Integer | 5 | 保留的密码历史记录数量 |
| 要求特殊字符 | require_special_char | Boolean | false | 密码是否必须包含特殊字符 |
| 要求数字 | require_number | Boolean | false | 密码是否必须包含数字 |
| 要求大写字母 | require_upper_case | Boolean | false | 密码是否必须包含大写字母 |
| 要求小写字母 | require_lower_case | Boolean | false | 密码是否必须包含小写字母 |
密码策略验证逻辑表
| 验证阶段 | 验证项目 | 验证条件 | 失败处理 | 优先级 |
| 密码强度验证 | 长度检查 | 密码长度 < min_length | 抛出异常:密码长度不足 | 高 |
| 复杂度检查 | 不满足complexity_level要求 | 抛出异常:密码复杂度不足 | 高 | |
| 特殊字符检查 | require_special_char=true且不含特殊字符 | 抛出异常:必须包含特殊字符 | 中 | |
| 数字检查 | require_number=true且不含数字 | 抛出异常:必须包含数字 | 中 | |
| 大写字母检查 | require_upper_case=true且不含大写字母 | 抛出异常:必须包含大写字母 | 中 | |
| 小写字母检查 | require_lower_case=true且不含小写字母 | 抛出异常:必须包含小写字母 | 中 | |
| 密码历史检查 | 重复性检查 | prevent_reuse=true且在历史记录中找到相同密码 | 抛出异常:不能使用最近N次使用过的密码 | 高 |
| 历史记录维护 | 密码修改时自动添加到历史记录 | 自动执行,超过reuse_history_count时删除最旧记录 | 低 | |
| 密码过期检查 | 过期时间检查 | 当前时间 - 密码更新时间 > expire_days | 强制要求修改密码 | 中 |
| 过期预警 | 距离过期时间 < 7天 | 提示用户密码即将过期 | 低 | |
| 密码安全评分 | 实时评分 | 基于长度、字符类型、模式等计算安全分 | 提供安全建议,不阻止但记录 | 低 |
| 风险评估 | 检测常见弱密码模式 | 记录安全事件,可配置是否阻止 | 中 |
复杂度等级对应规则表
| 复杂度等级 | 等级名称 | 必须包含要求 | 最小长度 | 示例 |
| 1 | 低强度 | 无特殊要求 | min_length | password123 |
| 2 | 中强度 | 数字 + 字母 | min_length + 2 | Password123 |
| 3 | 高强度 | 数字 + 大小写字母 + 特殊字符 | min_length + 4 | P@ssw0rd!123 |
验证执行时机表
| 验证类型 | 注册时 | 登录时 | 修改密码时 | 重置密码时 |
| 密码强度验证 | ✅ | ❌ | ✅ | ✅ |
| 密码历史检查 | ❌ | ❌ | ✅ | ✅ |
| 密码过期检查 | ❌ | ✅ | ❌ | ❌ |
| 密码安全评分 | ✅ | ❌ | ✅ | ✅ |
异常消息映射表
| 验证失败类型 | 异常代码 | 用户提示消息 | 日志级别 |
|---|---|---|---|
| 密码长度不足 | PASSWORD_LENGTH_INVALID | 密码长度不能少于指定最小长度 | WARN |
| 复杂度不满足 | PASSWORD_COMPLEXITY_LOW | 密码复杂度不足,请包含所需字符类型 | WARN |
| 密码重复使用 | PASSWORD_REUSE_DETECTED | 不能使用最近使用过的密码 | WARN |
| 密码已过期 | PASSWORD_EXPIRED | 密码已过期,请修改密码 | INFO |
| 密码即将过期 | PASSWORD_EXPIRE_SOON | 密码即将过期,建议及时修改 | INFO |
4.2.4 登录限制策略 (LOGIN_RESTRICTION)
功能配置:
- enabled: 启用登录限制
- max_login_attempts: 最大登录尝试次数
- lockout_duration: 锁定持续时间
- enable_captcha: 启用验证码
- captcha_threshold: 验证码触发阈值
- enable_time_restriction: 启用时间限制
- allowed_login_time: 允许登录时间段
验证逻辑:
- 失败次数统计:记录连续失败次数
- 账户锁定机制:达到阈值自动锁定
- 验证码触发:失败次数达到阈值时要求验证码
- 时间限制检查:限制登录时间段
4.2.5 会话策略 (SESSION_POLICY)
功能配置:
- enabled: 启用会话策略
- session_timeout: 会话超时时间
- max_concurrent_sessions: 最大并发会话数
- enable_single_login: 启用单点登录
- enable_session_fixation: 启用会话固定防护
- enable_session_tracking: 启用会话跟踪
验证逻辑:
- 会话超时管理:自动过期处理
- 并发会话控制:限制同时登录数量
- 单点登录强制:踢出前一个会话
- 会话安全防护:防止会话固定攻击
4.2.6 时间限制策略 (TIME_RESTRICTION)
功能配置:
- enabled: 启用时间限制
- allow_start_time: 允许开始时间
- allow_end_time: 允许结束时间
- allow_weekdays: 允许工作日登录
- allow_weekends: 允许周末登录
- allow_holidays: 允许节假日登录
验证逻辑:
- 时间段检查:验证当前时间是否在允许范围内
- 日期类型检查:验证工作日、周末、节假日
- 节假日特殊处理:支持节假日配置
5. 完整登录流程
5.1 标准登录执行流程
阶段一:请求接收与初步验证
- 请求参数解析
- 解析登录类型、凭证信息
- 提取客户端信息(IP、设备信息等)
- 基础参数校验
- 必填字段验证
- 参数格式校验
- 业务规则初步检查
- 安全策略配置加载
- 从数据库加载当前租户的安全策略
- 策略缓存和优先级排序
- 租户隔离策略应用
阶段二:前置安全验证
- IP限制验证
- 白名单/黑名单检查
- 地理位置风险评估
- 时间限制验证
- 登录时间段检查
- 日期类型验证
- 验证码触发检查
- 基于失败次数的验证码要求
- 验证码生成和验证
阶段三:用户身份验证
- 用户信息查找
- 根据登录类型查询用户
- 用户状态初步判断
- 用户状态深度检查
- 账户启用状态验证
- 账户锁定状态检查
- 密码过期状态判断
- 具体认证逻辑执行
- 密码验证/验证码验证/第三方认证
- 认证凭证的安全性检查
阶段四:后置安全验证
- 设备限制验证
- 设备类型合规性检查
- 设备数量限制验证
- 新设备自动绑定
- 会话策略验证
- 并发会话数量检查
- 单点登录冲突处理
- 会话安全性验证
- 登录频率限制
- 单位时间内登录次数限制
- 异常登录行为检测
阶段五:登录完成处理
- 会话创建
- 访问令牌生成
- 刷新令牌创建
- 会话信息存储
- 审计日志记录
- 成功登录记录
- 安全事件记录
- 用户行为跟踪
- 结果返回
- 标准化响应格式
- 令牌信息返回
- 用户基本信息
5.2 异常处理流程
异常分类体系
- 参数异常 (ParameterException)
- 安全策略异常 (SecurityPolicyException)
- 用户状态异常 (UserStatusException)
- 认证失败异常 (AuthenticationException)
- 系统异常 (SystemException)
异常处理策略
- 分级错误信息:用户友好提示 vs 详细错误信息
- 安全事件记录:所有异常都记录安全日志
- 失败统计:用于登录限制策略
- 恢复机制:提供明确的恢复指引
6. 安全策略管理
6.1 策略配置管理
动态配置特性
- 实时生效:策略修改无需重启服务
- 优先级管理:策略执行顺序控制
- 条件触发:基于上下文的策略触发
- 租户隔离:多租户策略完全隔离
配置验证机制
- 语法验证:配置格式正确性
- 逻辑验证:策略逻辑合理性
- 冲突检测:策略间冲突识别
- 性能影响:策略执行性能评估
6.2 策略执行引擎
执行优化策略
- 懒加载:策略按需加载
- 缓存机制:频繁使用的策略缓存
- 并行执行:无依赖关系的策略并行执行
- 短路优化:关键失败快速返回
7. 监控与审计
7.1 系统监控指标
性能监控
- 登录请求响应时间
- 策略执行时间统计
- 系统资源使用情况
- 数据库查询性能
业务监控
- 登录成功率/失败率
- 各登录策略使用分布
- 安全策略触发频率
- 用户活跃度统计
7.2 安全审计
审计日志类型
- 登录审计:所有登录尝试记录
- 安全事件:安全策略触发记录
- 用户行为:关键用户操作记录
- 系统事件:系统级安全事件
审计分析
- 异常登录行为检测
- 安全威胁模式识别
- 用户行为分析
- 合规性报告生成
8. 部署与运维
8.1 系统配置
应用配置
<YAML>security: policy: cache-duration: 300s enable-audit-log: true max-login-attempts: 5 session-timeout: 1800
数据库配置
- 连接池优化配置
- 读写分离支持
- 分库分表策略
8.2 高可用设计
服务冗余
- 多实例部署
- 负载均衡配置
- 故障自动转移
数据备份
- 实时数据同步
- 定期备份策略
- 灾难恢复方案
9. 安全考虑
9.1 数据安全
- 密码安全:强加密算法,盐值加密
- 传输安全:HTTPS加密传输
- 存储安全:敏感数据加密存储
- 会话安全:JWT签名验证,防篡改
9.2 防护机制
- 防暴力破解:登录失败次数限制
- 防重放攻击:时间戳和随机数验证
- 防CSRF攻击:Token验证机制
- 防注入攻击:参数预处理和验证
10. 扩展性设计
10.1 横向扩展
- 支持新的登录方式快速接入
- 新的安全策略模块化添加
- 多认证源支持
- 国际化扩展支持
10.2 性能扩展
- 缓存策略优化
- 数据库查询优化
- 异步处理机制
- 水平扩展支持