Skip to content

feat: bind MCP user context tokens to audience and add unique jti - #740

Open
Stella-sea wants to merge 3 commits into
DEEIX-AI:devfrom
Stella-sea:feat/mcp-user-context-aud-jti
Open

Stella-sea wants to merge 3 commits into
DEEIX-AI:devfrom
Stella-sea:feat/mcp-user-context-aud-jti

Conversation

@Stella-sea

Copy link
Copy Markdown
Contributor

Summary

#737 引入的签名 MCP 用户上下文 token 补上两个通用声明:audjti

#737 之后,签出的 token 对任何管理员注册的 MCP server 都有效——同一 token 可以在多个服务端之间重放,服务端也无法对单次调用做幂等。本 PR:

  • aud:绑定目标服务地址(strings.TrimSpace(CallConfig.BaseURL),与管理员注册值一致)。服务端校验时比对自身注册地址,即可拒绝重放到其他服务端的 token。
  • jti:每次 tools/call 签发唯一 ID(uuid v4)。服务端可用它做 TTL 窗口内的重放防护和幂等键。

Change type

  • Feature
  • Security hardening

Affected areas

  • Backend / API
  • MCP / tools

Verification

  • gofmt -l:干净
  • go vet ./internal/pkg/mcpauth/...:通过
  • go test ./internal/pkg/mcpauth/... -count=1:全部通过(含新增的 aud/jti 往返用例)
  • conversation 包无法在本地编译(sqlite-vec CGO 依赖),新增的两个用例(aud 绑定断言、jti 每次调用唯一)交给 CI 验证

Configuration, migration, and compatibility notes

  • 纯增量:payload 新增两个字段均为 omitempty,签名算法、格式、密钥配置均不变。
  • 对现有验签方(按 JSON 反序列化 payload)完全向后兼容:不认识新字段的服务端不受影响;想要更严的服务端可以开始校验 aud/jti
  • 无新配置项、无 DB 迁移、无前端改动。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant