NATSaudit.event.published审计事件发布(JetStream 事件)

各业务服务发布、audit_service 消费持久化的统一审计事件流。发布方不等待落库,落库由消费侧完成。此方向为单向流,无回复。

Request Payload

消息格式:JSON

NameData TypeRequiredDescription
eventIdstringYes事件 ID(ULID,JetStream 消息去重键)
actorIdstringNo行为主体用户 ID(系统动作为空)
actionstringYes动作标识,如 auth.login.password / admin.user.freeze
resourcestringYes涉及资源,如 user/<userId>、order/<orderId>
resultstringYessuccess / failure
ipstringNo来源 IP(可选)
detailstringNo补充信息(须脱敏,不含敏感数据)
occurredAtstringYes发生时间(ISO 8601 UTC)
type RequestBody = {
  /** 事件 ID(ULID,JetStream 消息去重键) */
  eventId: string
  /** 行为主体用户 ID(系统动作为空) */
  actorId?: string
  /** 动作标识,如 auth.login.password / admin.user.freeze */
  action: string
  /** 涉及资源,如 user/<userId>、order/<orderId> */
  resource: string
  /** success / failure */
  result: string
  /** 来源 IP(可选) */
  ip?: string
  /** 补充信息(须脱敏,不含敏感数据) */
  detail?: string
  /** 发生时间(ISO 8601 UTC) */
  occurredAt: string
}
{
  "eventId": "01JD8SNXER6Y9Z5FZ",
  "actorId": "01JD8SEGQ0P9N2XK4L7VDH3T6C",
  "action": "auth.login.password",
  "resource": "user/01JD8SEGQ0P9N2XK4L7VDH3T6C",
  "result": "failure",
  "ip": "198.51.100.7",
  "detail": "密码错误",
  "occurredAt": "2026-10-14T07:58:12Z"
}

Examples

{
  "eventId": "01JD8SNXER6Y9Z5FZ",
  "actorId": "01JD8SEGQ0P9N2XK4L7VDH3T6C",
  "action": "auth.login.password",
  "resource": "user/01JD8SEGQ0P9N2XK4L7VDH3T6C",
  "result": "failure",
  "ip": "198.51.100.7",
  "detail": "密码错误",
  "occurredAt": "2026-10-14T07:58:12Z"
}

Remarks

流语义:JetStream 持久化、按 eventId 去重、durable consumer 断点续消费——事件不丢、可重放。事件契约(字段与动作标识枚举)由 libs/common 统一约束;detail 进流前必须脱敏,验证码、令牌、支付凭据等敏感值严禁出现。发布方与消费方不直接交互,audit_service 持久化结果不回流。