一个完整的用户登录认证流程图,涵盖了前端校验、后端安全防护(防爆破)、密码哈希比对、双因素认证(2FA)及令牌签发的完整生命周期:
认证流程图
flowchart TD
Start(["用户发起登录"]) --> Input["输入账号、密码(及验证码)"]
Input --> FeValid{"前端格式校验"}
FeValid -- "校验未通过" --> FeError["前端提示格式错误"]
FeValid -- "校验通过" --> SendReq["发起 HTTPS POST 请求"]
SendReq --> RateLimit{"频率限制 / 防刷检查"}
RateLimit -- "请求超限" --> Err429["返回 HTTP 429: 请求过于频繁"]
RateLimit -- "通过" --> QueryUser{"查询用户信息"}
QueryUser -- "用户不存在" --> GenericErr["返回模糊报错: 用户名或密码错误"]
QueryUser -- "用户存在" --> CheckStatus{"账号状态检查"}
CheckStatus -- "已冻结 / 禁用" --> ErrStatus["返回: 账号已被锁定/禁用"]
CheckStatus -- "正常" --> VerifyPwd{"密码哈希比对 (如 bcrypt/argon2)"}
VerifyPwd -- "密码错误" --> RecordFail["记录失败次数"]
RecordFail --> CheckMaxFail{"是否达到最大错误阈值?"}
CheckMaxFail -- "是" --> LockAcc["临时锁定账号 (如 15 分钟)"] --> GenericErr
CheckMaxFail -- "否" --> GenericErr
VerifyPwd -- "密码正确" --> Check2FA{"是否开启两步验证 (2FA)?"}
Check2FA -- "是" --> Req2FA["返回临时凭证并要求 2FA 验证"]
Req2FA --> Input2FA["用户输入动态验证码 (TOTP/短信/邮箱)"]
Input2FA --> Verify2FA{"验证 2FA 码"}
Verify2FA -- "验证失败" --> Err2FA["提示: 双重验证码不正确"]
Verify2FA -- "验证通过" --> GenToken
Check2FA -- "否" --> GenToken["重置失败重试计数"]
GenToken --> IssueToken["签发 Token (Access Token + Refresh Token)"]
IssueToken --> LogRecord["异步记录登录日志 (IP、设备、时间)"]
LogRecord --> ReturnSuccess["返回登录成功响应"]
ReturnSuccess --> FeSave["前端安全存储 Token 并重定向至首页"]
FeSave --> End(["登录流程结束"])