2.6 KiB
2.6 KiB
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 小时的长时间会话保持测试。
因此严格遵循指令:
坚决不伪造虚假 PASS。
SLIDING_TTL_RUNTIME_CONFIRMATION = NOT_EXECUTED - 本地代码保证:
DmsHttpClient在获得 200 业务成功响应后调用tokenManager.markSuccessfulUse(),在客户端内部滑动延展有效期估计,符合协议理论模型。