status: done created: 2026-07-12
spring-security-oauth2-authorization-server 或 sa-token-oauth2;resource、精确 redirect、单次 code 与未知 grant 失败关闭;后续 OAuth 行为测试必须覆盖 metadata → authorize → token → /mcp 闭环,不能以类存在或可编译代替协议证明。
RFC 9728 资源元数据包含 canonical resource 和 authorization server;
401 包含正确 WWW-Authenticate resource metadata;
RFC 8414 元数据只声明真实支持的 grant、PKCE 和客户端认证方法;
authorization request/token request 缺少或改变 resource 时拒绝;
只允许 PKCE S256,plain/空 challenge/verifier 不匹配拒绝;
redirect URI 必须逐字匹配,前缀、子域、端口、path、fragment 变化拒绝;
code 120 秒过期且只能使用一次,20 路并发兑换只有一个成功;
state 原样返回但不进入服务端身份、日志或授权判断。
/mcp 从通用 Sa-Token 拦截器排除后,无 OAuth Token 仍由专用 Filter 返回 401;fcp_... Secret 不能直接调用 /mcp;fdu_... Token 只能从 Authorization Bearer 读取,query/cookie/arguments 不接受;/system/**、/ai/** 管理接口被拒绝;2025-06-18;/sse、message endpoint、SSE transport Bean、STATELESS 或 stdio。create_by/update_by=A 和 create_dept=activeOrgId;update_by=A;V1.0.22 唯一,表/实体/XML/逻辑删除一致;| 范围 | 命令 | 预期 |
|---|---|---|
| Core/ORM/Log | mvn -Penable-tests -pl forge-starter-log -am test |
显式/普通身份上下文全绿 |
| Identity | mvn -Penable-tests -pl .../forge-plugin-capability-identity -am test |
OAuth、Token、上下文 P0 全绿 |
| MCP | mvn -Penable-tests -pl .../forge-plugin-mcp -am test |
Streamable HTTP 13+ tests 全绿 |
| Control Plane | mvn -Penable-tests -pl .../forge-plugin-capability-control-plane -am test |
20+ tests 全绿 |
| AI | mvn -Penable-tests -pl .../forge-plugin-ai test |
84 tests 全绿 |
| Admin | mvn -pl forge-admin-server -am package -DskipTests |
全部预期 reactor modules SUCCESS |
| Frontend | nvm use v20.19.0 && pnpm build |
production build PASS |
| 范围 | 结果 | 证据摘要 |
|---|---|---|
| Identity | PASS | 18/18;Token codec/service/controller、PKCE/redirect/resource、Redis HMAC+Lua、MCP resolver、上下文、双身份审计、依赖隔离 |
| Capability | PASS | 13/13;Observer 接入后注册、授权、Schema 和调用回归 |
| MCP | PASS | 13/13;协议版本 2025-06-18、单 Streamable HTTP、裸请求 401 和 transport guard |
| Control Plane | PASS | 20/20;客户端、grant、审计、Schema 回归 |
| Admin | PASS | 39/39 reactor package -DskipTests;单模块启用测试生命周期通过,旧 fcp_ Resolver 测试已清除 |
| Dependency | PASS | Identity dependency tree、全部 POM、Admin JAR 均无 SAS/Sa-Token OAuth2 |
| SQL/XML | PASS | Mapper XML xmllint;V1.0.22 唯一;无 Flyway placeholder、tenant 0、物理 DELETE |
| Frontend | PASS | Node 20.19.0 目标 ESLint 无输出;Vite production build PASS |
条件跳过:未对用户现有数据库执行 V1.0.22;未用真实 Redis 做 20 路并发兑换;未启动 Admin 做真实浏览器授权与完整 metadata → authorize → token → /mcp initialize E2E。以上不计为 PASS,留待 Review/受控环境验收。
本轮未修改实现,只复跑高风险模块和静态边界:
| 检查 | 结果 |
|---|---|
| Identity tests | PASS,18/18 |
| MCP tests | PASS,13/13 |
| Identity dependency tree | PASS,无 SAS、无 Sa-Token OAuth2 |
git diff --check、Mapper xmllint、V1.0.22 placeholder/tenant 0/物理 DELETE |
PASS |
| MCP 集成测试身份来源核查 | FAIL HARD-GATE:使用测试 Resolver,不是 fdu_/Identity 聚合链 |
| client grant + 用户权限交集核查 | FAIL HARD-GATE:运行时仅检查 Token scope |
| PUBLIC/USER revoke | FAIL:当前端点只接受 CONFIDENTIAL client secret |
| 当前组织前置校验 | FAIL:授权阶段未比较 user/client activeOrgId |
Review 结论:已有单元测试继续通过,但不能覆盖或推翻 R1–R5;Fix 后必须为每项增加 Red/Green 证据。
| Review 项 | Red/Green 证据 | 结果 |
|---|---|---|
| R1 聚合链 | McpDelegatedIdentityIntegrationTest:合法 fdu、完整 Sa-Token 排除链、initialize/list/call、真实审计 Observer、Session/Tenant/MDC 清理 |
PASS,3/3 |
| R2 权限交集 | ForgeCapabilityAuthorizationPolicyTest + AutoConfiguration Test:scope、grant、permission、tenant/org、ping 显式例外、Bean 替换 |
PASS |
| R3 用户撤销 | Token Service/Controller:当前 A、tenant、client、USER 类型、幂等、跨用户/跨客户端拒绝 | PASS |
| R4 组织前置 | Authorization Controller:预览与确认均在 validator/code store 前失败 | PASS |
| R5 错误分类 | OAuth DB 故障为 503;MCP 401/Origin 403/基础设施 503;安全日志不含凭据 | PASS |
| R6 加固 | 长度上限、issuer query、SYNC-only、LoginUser 快照、last_used_at 节流、30 天留存清理 | PASS |
| 范围 | 结果 |
|---|---|
| Identity | PASS,34 tests(最终复跑后以 execution-log 为准) |
| Capability | PASS,13 tests |
| MCP | PASS,14 tests |
| Control Plane | PASS,20 tests |
| AI | PASS,84 tests;全部为 mock/stub 单测,未调用真实模型 |
| Admin | PASS,39/39 reactor package -DskipTests |
| Frontend | PASS,目标 ESLint 无输出;Node 20.19.0 production build 成功 |
| Dependency | PASS,无 SAS、无 Sa-Token OAuth2 |
| XML/Flyway | PASS;Mapper XML 可解析,无 placeholder/tenant 0;唯一物理 DELETE 是带代码注释和 Spec 回滚说明的短期 Token 超期留存任务 |
2025-06-18,单 /mcp Streamable HTTP;clean install 39/39;AiCapabilityClientMapper.xml 只存在于 control-plane;forge-ai-hub-secure-actions Proposal/Apply。