评分式登录(Attempt)
登录不是一个布尔判断,而是一次带环境指纹的尝试记录。
模型
- 懒创建:首个因素开始验证时创建尝试记录(
attempt.record),绑定当时的环境指纹(IP、UA、设备特征等)。 - 指纹绑定:尝试只接受与其绑定指纹一致的后续验证;指纹不匹配的合并请求被拒绝。
- 分数累加:每个验证通过的因素按配置累加分数——密码、OTP、MFA、验证码各有其分值。
- 阈值签发:累加分数达到配置阈值(管理端可调)才允许签发会话;未达阈值继续索取下一因素。
状态传递
尝试状态(当前分数、阈值、剩余因素路径)只经不透明尝试工单在服务间传递:
| 操作 | 消费 | 说明 |
|---|---|---|
| inspect | 否 | 查看当前状态,供前端决定下一步展示哪个因素 |
| consume | 是 | 签发会话时消费,一次性 |
| abandon | 是 | 用户放弃 / 超时作废 |
全量记录
成功与失败的尝试全部入库存档(含环境指纹),管理端可按用户检索尝试历史;阈值与各因素分值经 attempt.config 读取与更新。