NATSattempt.ticket.consume消费尝试工单

identity_service 签发会话前回源消费:一次性、要求状态已达 satisfied。

Request Payload

消息格式:JSON

NameData TypeRequiredDescription
attemptTicketIdstringYes尝试工单
requireSatisfiedbooleanNo是否要求已达阈值(签发会话恒为 true)
type RequestBody = {
  /** 尝试工单 */
  attemptTicketId: string
  /** 是否要求已达阈值(签发会话恒为 true) */
  requireSatisfied?: boolean
}
{
  "attemptTicketId": "atk_9f2c7be14d0a53e8",
  "requireSatisfied": true
}

Response Payload

回复使用统一信封 {id, code, messages, result},其 result:

NameData TypeRequiredDescription
consumedbooleanYes是否消费成功
userIdstringYes尝试归属用户
verifiedFactorsarrayYes最终通过的因素
scorenumberYes最终分数
type ResponseBody = {
  /** 是否消费成功 */
  consumed: boolean
  /** 尝试归属用户 */
  userId: string
  /** 最终通过的因素 */
  verifiedFactors: string[]
  /** 最终分数 */
  score: number
}
{
  "consumed": true,
  "userId": "01JD8SEGQ0P9N2XK4L7VDH3T6C",
  "verifiedFactors": [
    "password",
    "mfa"
  ],
  "score": 100
}

Response Code

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

code Meaning Notes
0 成功 消费尝试工单
2007 工单无效或已消费
2008 指纹不匹配
2006 尚未达标 requireSatisfied=true 且 score < threshold

Examples

{ "attemptTicketId": "atk_9f2c7be14d0a53e8", "requireSatisfied": true }
{
  "id": "01JD8SVPT1E7G4HD",
  "code": 0,
  "messages": [],
  "result": {
    "consumed": true,
    "userId": "01JD8SEGQ0P9N2XK4L7VDH3T6C",
    "verifiedFactors": ["password", "mfa"],
    "score": 100
  }
}