两步验证(2fa)
特性定义
-
2fa
:表示服务端允许两步验证 -
2fa_enforced
:表示服务端强制启用两步验证。
依赖2fa
,特性列表中不应只出现2fa_enforced
而不存在2fa
。
当服务端强制启动两步验证时,所有新注册用户均须在注册时开启两步验证。当用户未启用两步验证时,只有以下接口可用:- 用户登出
- 用户注销
- 绑定
2FA
访问其他接口均会产生错误:
202000
:用户未启用两步验证。
客户端应引导已注册但未开启两步验证的用户尽快开启两步验证。
适用范围
- 用户注册(
POST /api/user/register
) - 用户登录(
POST /api/user/login
) - 用户注销(
POST /api/user/revoke
) - 用户信息(
GET /api/user/info
) - 用户修改密码(
PATCH /api/user/password
)
TODO: 列举出用到 2FA
的所有位置
请求参数
参数名 | 类型 | 详情 |
---|---|---|
2fa_secret | string | 两步验证的 Secret ,注册时由客户端生成,发送至服务端。 |
2fa_code | \d{6} | 两步验证的代码。当用户未开启两步验证时,该字段填入任何值均可。 |
影响结构
当 2fa_enforced
启用时,以下所有新增参数均为 Required
。
用户注册
interface UserRegisterBody {
// ...
"2fa_secret"?: string;
"2fa_code"?: string;
}
用户登录
interface UserLoginBody {
// ...
"2fa_code"?: string;
}
interface UserInfo {
// ...
"2fa_enabled"?: boolean;
}
用户注销
interface UserRevokeBody {
"2fa_code"?: string;
}
用户信息
interface UserInfo {
// ...
"2fa_enabled"?: boolean;
}
用户修改密码
interface UserChangePasswordBody {
// ...
"2fa_code"?: string;
}
绑定 2FA
当 2FA
为可选项时,用户可以使用该接口绑定两步验证。当 2fa_enforced
启用时,未开启两步验证的用户可以通过该接口开启两步验证。
Endpoint
POST /api/features/2fa
请求
请求参数
参数名 | 类型 | 详情 |
---|---|---|
2fa_secret | string | 两步验证的 Secret ,由客户端生成后发送至服务端。 |
2fa_code | \d{6} | 两步验证的代码。 |
错误列表
错误代码 | 详情 |
---|---|
202001 | 两步验证代码错误 |
202002 | 两步验证 Secret 非法 |
202004 | 用户已启用两步验证,无法重复绑定 |
取消绑定 2FA
用户可以使用该接口取消当前已绑定的两步验证。
Endpoint
DELETE /api/features/2fa
请求
请求参数
参数名 | 类型 | 详情 |
---|---|---|
2fa_code | \d{6} | 两步验证的代码。 |
错误列表
错误代码 | 详情 |
---|---|
202000 | 用户未启用两步验证 |
202001 | 两步验证代码错误 |
202003 | 两步验证已达尝试上限 |
完整错误列表
错误代码 | 详情 |
---|---|
202000 | 用户未启用两步验证 |
202001 | 两步验证代码错误 |
202002 | 两步验证 Secret 非法 |
202003 | 两步验证已达尝试上限 |
202004 | 用户已启用两步验证,无法重复绑定 |