这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
认证基础
认证基础从账号密码开始。它虽然传统,但仍然是多数系统的根身份入口。设计不好,后面的 Token、SSO、MFA 都会建立在不安全的地基上。
密码存储
密码绝不能明文存储,也不应该只做一次普通哈希。正确做法是使用带盐的慢哈希算法,例如 bcrypt、scrypt 或 Argon2:
password -> salt -> slow hash -> password_hash数据库只保存 password_hash、算法版本和必要参数。这样即使数据库泄露,攻击者也无法直接拿到原始密码。
登录流程
基础登录流程可以分成几步:
- 用户提交账号和密码。
- 服务端按账号查找用户。
- 使用相同算法验证密码。
- 检查账号状态:是否冻结、是否未验证邮箱、是否需要重置密码。
- 创建会话或签发 Token。
- 记录登录日志和风险信号。
错误提示要谨慎。不要明确告诉攻击者“账号存在但密码错误”,可以统一提示“账号或密码错误”。
防暴力破解
登录接口是高风险入口,需要保护:
- 同一账号连续失败后增加冷却时间。
- 同一 IP 或设备失败过多时触发验证码。
- 高风险地域或代理访问时要求二次验证。
- 登录失败日志进入风控系统。
限流不能只按 IP,因为攻击者可以使用代理池;也不能只按账号,因为会影响被撞库的正常用户。通常要结合账号、IP、设备和行为特征。
注册与找回
注册和找回密码同样属于认证系统:
- 注册时校验邮箱或手机号,避免无效账号泛滥。
- 找回密码链接要短期有效、一次性使用。
- 重置密码后应撤销旧会话。
- 修改邮箱、手机号、密码前要验证当前身份。
认证基础的目标是把“证明身份”的第一步做扎实。下一章会讲 Token,解决登录成功后如何在后续请求中表达身份。