
1) 【一句话结论】
高安全性用户认证系统需通过密码加盐哈希(防暴力破解)、动态无状态会话(JWT+时间戳nonce,防劫持与重放)、滑动验证码(防自动化)、速率限流(防暴力破解)等组合,构建多层级防御体系,有效抵御暴力破解、会话劫持、重放攻击。
2) 【原理/概念讲解】
老师口吻解释关键概念:
Secure(仅HTTPS传输)、HttpOnly(防JavaScript窃取),防XSS攻击。iat+5分钟)且nonce唯一,防请求重放。3) 【对比与适用场景】
| 方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Session Cookie(有状态) | 服务器存储会话ID,客户端存Cookie | 服务器维护状态,需HTTPS传输、HttpOnly | 传统B/S架构(如单体应用) | 设置Secure、HttpOnly,防XSS;会话超时需处理 |
| JWT(无状态) | 客户端存token(含用户信息+签名) | 服务器不存储,签名验证 | 微服务、SPA(前端无状态) | 令牌过期后需重新登录;签名密钥需轮换(每3个月) |
4) 【示例】
用户登录流程(伪代码):
{
"sub": "user_id",
"exp": 1701234567890,
"iat": 1701234567890,
"jti": "token_id",
"nonce": "uuid"
}
签名用HS256(密钥secret),发送给客户端。Authorization: Bearer <token> → 服务器验证签名、exp(过期时间)、jti(唯一标识,防重放)、时间戳(请求中的时间戳是否在token的iat+5分钟内)和nonce(是否匹配),通过则返回用户信息。5) 【面试口播版答案】
面试官您好,设计高安全性用户认证系统,核心是构建多层级防御。首先,密码策略:要求长度≥12位(含大小写、数字、特殊字符),存储用bcrypt加盐(16字节随机盐,迭代次数根据系统CPU负载调整,例如高并发场景下设为10000次),防暴力破解。会话管理采用JWT(无状态),包含用户ID、过期时间(30分钟)、唯一标识(jti,防重放)、时间戳(iat),签名用HS256(密钥每3个月轮换,加密存储)。验证码用滑动验证(Canvas绘制滑块,用户拖动到目标位置,服务器验证坐标是否在5像素容差内),有效时间60秒。登录请求限流:正常用户每分钟10次,恶意用户(连续失败3次)封禁IP。重放攻击防御:请求中添加毫秒级时间戳和UUID nonce,服务器验证时间戳是否在5分钟内且nonce唯一。整体架构分前端、认证服务(登录、生成token)、用户服务(密码验证)、限流服务,所有通信用HTTPS。这样能有效抵御暴力破解、会话劫持和重放攻击。
6) 【追问清单】
7) 【常见坑/雷区】