POST/api/v1/auth/login/password手机号 / 邮箱 / 用户名 + 密码登录

验证密码因素(默认 40 分)。密码正确但分数未达阈值时返回尝试工单与可选的下一因素,由前端继续编排。

Request

Headers

NameData TypeRequiredDescription
Content-TypestringYes请求体内容类型(默认值 "application/json")
type RequestHeaders = {
  /** 请求体内容类型,默认值 "application/json" */
  Content-Type: string
}
{
  "Content-Type": "application/json"
}

Body

NameData TypeRequiredDescription
identifierstringYes手机号 / 邮箱 / 用户名
passwordstringYes登录密码
captchaTicketstringNo验证码已验证工单(需要时携带,captcha 因素 20 分)
type RequestBody = {
  /** 手机号 / 邮箱 / 用户名 */
  identifier: string
  /** 登录密码 */
  password: string
  /** 验证码已验证工单(需要时携带,captcha 因素 20 分) */
  captchaTicket?: string
}
{
  "identifier": "chenlin",
  "password": "J8v#pQ2mXs!a",
  "captchaTicket": "cpv_5e02ab71d3890f64"
}

Response

Body

NameData TypeRequiredDescription
statusstringYespending 未达标 / satisfied 已达标并签发会话
attemptTicketstringNo尝试工单;pending 时必返,后续因素验证继续携带
nextFactorsarrayNopending 时按配置仍可选的因素
sessionTokenstringNo会话令牌(不透明);satisfied 时返回
refreshTokenstringNo刷新令牌;satisfied 时返回
sessionIdstringNo会话 ID;satisfied 时返回
expiresAtstringNo会话过期时间;satisfied 时返回
type LoginResultDTO = {
  /** pending 未达标 / satisfied 已达标并签发会话 */
  status: string
  /** 尝试工单;pending 时必返,后续因素验证继续携带 */
  attemptTicket?: string
  /** pending 时按配置仍可选的因素 */
  nextFactors?: string[]
  /** 会话令牌(不透明);satisfied 时返回 */
  sessionToken?: string
  /** 刷新令牌;satisfied 时返回 */
  refreshToken?: string
  /** 会话 ID;satisfied 时返回 */
  sessionId?: string
  /** 会话过期时间;satisfied 时返回 */
  expiresAt?: string
}
{
  "status": "pending",
  "attemptTicket": "atk_9f2c7be14d0a53e8",
  "nextFactors": [
    "otp",
    "mfa",
    "captcha"
  ]
}

HTTP Code

HTTP Status Meaning Notes
200 成功 达标时直接签发会话;未达标返回尝试工单
401 凭据错误 用户名或密码错误
403 账号被冻结 管理员已冻结该账号

Response Code

响应使用统一信封 {id, code, messages, result},其 code 字段:

code Meaning Notes
0 成功 返回登录结果
2001 用户名或密码错误 凭据不匹配
2002 账号被冻结 管理员已冻结该账号
2102 验证码工单无效 captchaTicket 无效或已消费

Examples

POST /api/v1/auth/login/password
Content-Type: application/json

{
  "identifier": "chenlin",
  "password": "J8v#pQ2mXs!a",
  "captchaTicket": "cpv_5e02ab71d3890f64"
}
{
  "id": "01JD8SH2P7N4M8WX",
  "code": 0,
  "messages": [],
  "result": {
    "status": "satisfied",
    "sessionToken": "st_7c1f9e05b28d4a63",
    "refreshToken": "rt_46a9c7e015283d5b",
    "sessionId": "01JD8SEGVK6MZ7W3Q4RT5N8YB2",
    "expiresAt": "2026-11-13T08:00:00Z"
  }
}

Remarks

首次因素验证时懒创建尝试并绑定环境指纹;后续所有因素验证必须携带同一指纹,不匹配的合并请求被拒绝(2008)。