Files
starRiverProperty/docs/testing/访客接口无鉴权调用评估与生产快测方案.md
hpd840321 7b2bd307f1 Initial commit: reorganized source tree
- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
2026-05-09 09:56:45 +08:00

4.3 KiB
Raw Permalink Blame History

访客接口无鉴权调用评估与生产快测方案

1. 目标

  • 基于生产日志评估“无鉴权调用访客接口”的真实边界。
  • 给出生产可执行的快测方案,验证访客楼层策略是否生效。
  • 通过脚本同时支持:
    • auth:标准鉴权验证(正式验收路径)
    • noauth-probe:无鉴权探测(安全风险判定,不作业务通过依据)

2. 日志证据与边界结论

日志来源:

  • maven-cw-elevator-application/logs/访客相关接口日志分析/日志分析/访客调用楼层放开接口清单.md
  • maven-cw-elevator-application/logs/访客相关接口日志分析/日志分析/10.0.22.209/202604301713/logs/elevator-app.log

关键证据:

  • 文档中同时存在“JWT 调用”和“无鉴权(username)调用”样本。
  • 但同批日志中的 PersonRuleServiceImpl:196 记录可见 CloudwalkCallContext 已包含:
    • company.companyId
    • user.callerName
    • 部分请求带 ext.value.authorizationJWT 场景)

边界判定:

  1. 观察到的“无 Authorization header”不能直接等价为“外部匿名可裸调”。
  2. 更可能是平台或网关已注入上下文后触发的内部调用路径。
  3. 生产对外验证必须以 auth 模式为准。
  4. noauth-probe 仅用于探测当前网关/应用是否放开了不应放开的入口。

3. 快测脚本与模式

脚本路径:

  • maven-cw-elevator-application/tools/visitor_floor_verification/scripts/quick_verify_visitor_floor_policy.py

3.1 auth 模式(正式)

三步调用:

  1. POST /component/person/detail
  2. POST /elevator/person/add/visitor
  3. POST /elevator/passRule/image

请求头采用 ELEVATOR_HEADER_*authorization/loginid/platformuserid/applicationid+ businessid

3.2 noauth-probe 模式(探测)

  • 仅发送 Content-Type,可选附加 businessid
  • 不发送 Authorization、loginid、platformuserid、applicationid。
  • 输出状态码/业务码用于判定“是否存在风险放开”。

4. 结果分级规则

4.1 auth 模式

  • 通过:
    • 三步 HTTP 均成功返回;
    • add/visitor 业务成功,或返回 76260532(交集为空,预期失败);
    • passRule/image 返回可解析数据。
  • 失败:
    • HTTP 4xx/5xx、超时、响应不可解析;
    • 关键业务码异常且不属于 76260532

4.2 noauth-probe 模式

  • 预期拦截(正常):
    • 返回 401/403,或明确鉴权失败业务码。
  • 安全异常(高风险):
    • 返回 2xx 且业务成功(特别是 add/visitor 成功)。
  • 待排查:
    • 返回 2xx 但业务失败且错误语义不清晰,需要结合网关策略判断。

5. 运行方式

先准备头信息(auth 模式):

cd maven-cw-elevator-application/tools/visitor_floor_verification
python3 -m pip install -r requirements.txt

export ELEVATOR_HEADER_AUTHORIZATION='Bearer <TOKEN>'
export ELEVATOR_HEADER_LOGINID='<LOGIN_ID>'
export ELEVATOR_HEADER_PLATFORMUSERID='<PLATFORM_USER_ID>'
export ELEVATOR_HEADER_APPLICATIONID='<APPLICATION_ID>'

也可使用模板文件:

  • maven-cw-elevator-application/tools/visitor_floor_verification/.env.quick_verify.example

例如:

set -a
source .env.quick_verify
set +a

auth 模式(正式验收):

python3 scripts/quick_verify_visitor_floor_policy.py \
  --mode auth \
  --org-base-url "http://<ORG_HOST>:<ORG_PORT>" \
  --elevator-base-url "http://<ELEVATOR_HOST>:<ELEVATOR_PORT>" \
  --meng-person-id "<MENG_HAI_WEN_PERSON_ID>" \
  --visitor-person-id "<TEST_VISITOR_PERSON_ID>" \
  --business-id "2524639890ba4f2cba9ba1a4eeaa4015" \
  --strict-name-check

noauth-probe 模式(可选一次):

python3 scripts/quick_verify_visitor_floor_policy.py \
  --mode noauth-probe \
  --org-base-url "http://<ORG_HOST>:<ORG_PORT>" \
  --elevator-base-url "http://<ELEVATOR_HOST>:<ELEVATOR_PORT>" \
  --meng-person-id "<MENG_HAI_WEN_PERSON_ID>" \
  --visitor-person-id "<TEST_VISITOR_PERSON_ID>" \
  --business-id "2524639890ba4f2cba9ba1a4eeaa4015" \
  --probe-with-businessid

6. 报告与留痕

脚本输出:

  • 控制台摘要(模式、三步状态、业务码、风险级别)
  • 报告文件:report/quick-verify-<timestamp>.json

建议归档:

  • 本次执行命令
  • 报告 JSON
  • 对应时段接口日志摘录
  • 最终分级(通过 / 预期拦截 / 高风险)