多因素登录
Solar Network 使用自主研发的多因素认证(MFA)系统。与需要恰好两步的传统 2FA 不同,我们的系统非常灵活——你可以配置多个验证因素,登录时选择其中任意一个即可。
登录流程
第一步:身份验证
首先提供你的身份(用户名或邮箱)和密码。
第二步:验证因子
密码验证通过后,系统检查你配置的认证因素。然后你可以选择其中任意一个来完成登录。
第三步:Token 交换
验证成功后,你将获得一个访问 token(以及可选的刷新 token)用于 API 认证。
认证因素
| 因素 | 工作原理 | 信任等级 |
|---|---|---|
| 密码 | 你的账户密码 | 1 |
| 邮箱验证码 | 发送到邮箱的一次性验证码 | 2 |
| TOTP | 验证器应用生成的验证码(Google Authenticator、Authy 等) | 3 |
| 应用内通知 | 推送通知发送的一次性验证码 | 2 |
| 通行密钥 | 生物识别(指纹、Face ID)或设备密码 | 3 |
| 实体安全密钥 | 从商店/活动获得的硬件安全密钥 | 3 |
| 二维码登录 | 用已认证的移动设备扫描二维码 | 3 |
| 恢复码 | 一次性备用代码 | 0 |
信任等级
每个因素都有一个信任等级。系统使用这些等级来确定高安全场景下需要的验证步骤数:
| 等级 | 说明 |
|---|---|
| 0 | 仅用于恢复(不能登录) |
| 1 | 基础(密码、PIN) |
| 2 | 标准(邮箱、应用内通知) |
| 3 | 最高(TOTP、通行密钥、安全密钥、二维码登录) |
跨设备登录批准
如果你在其他设备上已登录,你可以从另一台设备批准登录请求,而无需自己完成第二步验证:
- 在设备 A(例如新手机)上开始登录
- 密码验证后,设备 A 显示"等待批准"
- 设备 B(你已登录的设备)收到通知
- 在设备 B 上查看登录详情(设备名称、IP、平台)
- 点击批准或拒绝(可能需要输入 PIN)
- 批准后,设备 A 通过 WebSocket 接收事件并立即交换 token
这在你的新设备上无法访问第二验证因素时非常有用。
WebSocket 事件
| 事件 | 方向 | 说明 |
|---|---|---|
auth.challenge.pending |
服务端 → 其他设备 | 新的登录挑战等待批准 |
auth.challenge.approved |
服务端 → 发起设备 | 登录已被另一设备批准 |
auth.challenge.declined |
服务端 → 发起设备 | 登录已被另一设备拒绝 |
会话管理
当登录从另一设备被批准时,新会话成为批准设备的子会话。你可以在账户安全设置中查看和管理所有活跃会话(并撤销它们)。
Token 模型
Solar Network 使用统一的 JWT 认证:
- 访问 token: 短期有效(1 小时),使用方式:
Authorization: Bearer <token> - 刷新 token: 长期有效(30 天),用于获取新的访问 token
- Token 为 RS256 JWT,由各服务本地验证
- 撤销通过 Redis 追踪(
auth:revoked:jti:{jti})
推荐设置
- 恢复码(必需)—— 你的安全保障
- 通行密钥或 TOTP(推荐)—— 日常使用
- 邮箱或应用内通知 —— 备用方式
这样你拥有:快速登录(通行密钥)、离线能力(TOTP)和备用选项(邮箱、恢复码)。