Files
railwaysystem/docs/reports/dms-r3/real-api-probe/RUN-20260916-01/auth-results.md
T

2.6 KiB
Raw Blame History

02 认证鉴权契约与 Token 生命周期审计 (Auth Results)

执行批次:RUN-20260916-01
认证调用结论:REAL_DMS_AUTH = BLOCKED (BLOCKED_BY_SECURE_CREDENTIAL_HANDOFF)
Cookie 名称状态:TOKEN_COOKIE_NAME = VENDOR_CONFIRMATION_REQUIRED (DEFAULT: "token", CONFIGURABLE)
Token TTL 状态:TOKEN_TTL = DOCUMENTED_7200S_NOT_RUNTIME_CONFIRMED
滑动刷新确认:SLIDING_TTL_RUNTIME_CONFIRMATION = NOT_EXECUTED


1. 认证接口契约对照 (Vendor Spec vs Current Implementation)

契约项 DMS 官方规范 当前 Adapter 实现 探测与验证结论 状态评价
Token 端点 POST /public/rest/third-party-app/token/get DmsTokenManager 组装完整 URL 路径与规范完全一致 MATCH
请求载荷 {"appid":"...","appsecret":"..."} DmsTokenRequest DTO 字段名与结构完全一致 MATCH
响应 Schema {"success":true,"token":"...","expiresIn":7200} 支持直接包含及 data 内嵌解析 具备防御性兼容解析 MATCH
Token 传递头 官方标注文档:Cookie DmsHttpClient: conn.setRequestProperty("Cookie", cookieName + "=" + token) 遵循规范,严禁使用 Bearer 头 MATCH
Cookie 键名 文档说明为请求 Cookie,常见默认为 token 配置类默认 tokenCookieName = "token",支持外部环境变量覆盖 运行时未经网络嗅探确认 Cookie Header,标记为需厂商确认 VENDOR_CONFIRMATION_REQUIRED
登录单飞互斥 “后台有限制,多次调用登录接口,只有最后一次有效” ReentrantLock + 双重检查锁定 (Single-Flight) 经 20 线程高并发自动化测试验证 MATCH (PASS)
401 自愈 401 Unauthorized 触发失效并重新登录 DmsHttpClient 捕获 401 -> tokenManager.invalidateToken() 单次安全重试 自动化测试验证自愈与死循环熔断 MATCH (PASS)

2. Token TTL 与滑动延续行为说明

  • 官方文档定义:expiresIn = 7200(标准 2 小时);且“成功调用任一平台接口会从调用时重新刷新 2 小时有效期”。
  • 运行时确认状态: 由于受测试凭证安全边界保护,本轮未向真实公网 DMS 发起长达 2 小时的长时间会话保持测试。 因此严格遵循指令:
    SLIDING_TTL_RUNTIME_CONFIRMATION = NOT_EXECUTED
    
    坚决不伪造虚假 PASS。
  • 本地代码保证: DmsHttpClient 在获得 200 业务成功响应后调用 tokenManager.markSuccessfulUse(),在客户端内部滑动延展有效期估计,符合协议理论模型。