OTP 仅适用于用户会话(JWT 登录)。
pk_ API 密钥豁免:它们是服务器到服务器的集成,另一端没有持有手机的真人。如果您的整个业务都通过 API 密钥运行,本页内容不会对您的集成产生任何影响。本页涵盖您的集成需要处理的按操作 OTP 流程(
otp_required → challenge →
verify)。终端用户对自身因子的所有管理——启用 2FA、渠道(短信/WhatsApp/邮箱)、
验证器应用(TOTP)、恢复代码和通行密钥——位于
个人资料与安全。工作原理
otp_token 为一次性使用,绑定到您的用户及其签发时对应的操作,并随质询(challenge)一同过期(验证码发送后 10 分钟)。
1. 查询您的策略
GET /v1/otp/settings 会告诉您 OTP 是否已启用,以及哪些操作需要验证码:
2. 请求验证码
201 —— 验证码已在发往账户手机号的途中:
sms、whatsapp、email 或 totp:
channel 时由服务器解析:先用 member 设置,再用组织默认值,若都没有则回退到 SMS。响应始终告知实际使用的渠道及其掩码目的地(phone——掩码号码、掩码邮箱,或 TOTP 的字面值 authenticator_app)。校验使用有效底线——先用账户自身的策略,再用组织默认值:弱于底线的显式渠道将返回 403 channel_locked_by_org,而不会被静默升级。
如果账户未绑定手机号:返回 409 phone_required(可通过 PATCH /v1/me 设置)。发送受每小时限额约束——超出限额将返回 429 too_many_attempts。
3. 验证验证码
401 invalid_code(每个质询最多可尝试 5 次)。
4. 携带令牌执行操作
idempotency_key 仍然是防重复的保障——OTP 并不能替代它。
两步登录
如果您的策略要求在login 时使用 OTP,POST /v1/auth/login 将不再直接返回会话:
pending_token 无法调用 API:它只能与验证码一起,换取真正的会话令牌:
已注册的 TOTP 在登录时始终会被要求。 member 确认验证器应用后,即使组织
策略没有要求
login 使用 OTP,登录也会返回正常的待验证 OTP 流程。通行密钥
登录本身已经是双因素流程,因此不会再要求第二个验证码。账户的手机号
- E.164 格式(
+56912345678),可在注册时、通过PATCH /v1/me或由您的运营方设置。 phone_verified会在您首次成功验证质询时变为true:这证明持有人手中确实握有该手机。- 更换手机号(操作
phone_change)时,验证码将发送到原有号码进行校验——任何人在未持有您当前手机的情况下都无法劫持您的验证码。 - 如果手机号是首次绑定(或未经验证即被更改),SMS/WhatsApp 质询将锁定 24 小时:这是防会话劫持的窗口期。冷却期内,若您已注册身份验证器应用或已验证邮箱,质询会自动改用该更强的因素发出(质询响应中会返回实际使用的渠道);仅当没有任何替代因素时才会收到
403 phone_binding_cooldown。由运营方设置的手机号没有冷却期。指定显式渠道会关闭自动回退:冷却期内的channel: sms即使已注册身份验证器应用,也会返回403 phone_binding_cooldown。 - 两步登录遵循同样的规则:登录 2FA 为 SMS/WhatsApp 且手机号处于冷却期时,登录验证码会改由身份验证器应用或您的登录邮箱发出(登录响应中返回实际的
channel)——绝不会发送到最近绑定且未验证的号码。没有替代因素时,登录返回403 phone_binding_cooldown,直到冷却期结束。
错误
常见问题
OTP 会影响我的服务器到服务器集成吗?
OTP 会影响我的服务器到服务器集成吗?
不会。
pk_ API 密钥在设计上即被豁免:自动化流程永远不经过 OTP。请妥善保管您的密钥——签发新密钥本身可能需要 OTP(操作 api_key_create)。我可以选择 SMS 还是 WhatsApp 吗?
我可以选择 SMS 还是 WhatsApp 吗?
可以——创建质询时传入
channel(sms、whatsapp、email 或 totp)。省略时沿用运营方按操作配置的渠道(可按账户或整个组织配置——在 GET /v1/otp/settings 中查看)。校验使用有效底线——先用账户策略,再用组织默认值:更弱的显式选择将返回 403 channel_locked_by_org,而不会被静默升级。验证码有效期多长?我有多少次尝试机会?
验证码有效期多长?我有多少次尝试机会?
验证码与质询的有效期为 10 分钟。每个质询最多可验证 5 次,另有每小时发送限额。产生的
otp_token 为一次性使用。我可以申请一个令牌并用于多个操作吗?
我可以申请一个令牌并用于多个操作吗?
不可以:令牌与创建质询时指定的确切操作绑定(
payout 令牌不能用于 transfer),且在首次使用时即被消耗。令牌被消耗后操作失败了——我会被扣两次款吗?
令牌被消耗后操作失败了——我会被扣两次款吗?
不会。令牌被消耗只意味着您需要重新验证一个新的质询;操作的
idempotency_key 仍然保证不会产生重复。