PanWatch PAT 个人访问令牌详解:为 MCP 端点签发最小权限凭证的完整指南
【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK & US markets, powered by TradingAgents. Portfolio insights, real-time alerts & automated reports.|盯盘侠:覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatch
PanWatch(盯盘侠)是一款覆盖 A股/港股/美股的 AI 盯盘工具,提供持仓分析、实时提醒与自动报告。当你要把 PanWatch 的行情数据接入 Claude 等 MCP 客户端时,需要为/mcp端点签发一个PAT(个人访问令牌)。本文带你从零了解 PAT 的签发、使用与安全设计——它采用最小权限原则,令牌只读、可随时吊销,是外部程序接入 PanWatch 的安全凭证。
什么是 PAT:MCP 端点的专用"门禁卡"
PanWatch 内置了一个轻量 MCP(Model Context Protocol)服务,挂在顶层 /mcp 端点,把助手的全部只读工具(查询行情、K线、持仓、提醒等)以 JSON-RPC 形式开放。外部客户端访问时必须携带一张"门禁卡"——PAT 令牌,其明文格式类似:
pwmcp_a1b2c3d4e5f6...(pwmcp_ 前缀 + 256bit 随机熵,共约 43 字符)前缀pwmcp_的作用类似 GitHub 的ghp_:一眼识别这是 PanWatch 的 MCP 令牌,也方便 secret 扫描器在代码库中揪出泄露的凭证(见 pat.py)。
为什么不复用登录会话:JWT 与 PAT 分流
你可能会问:既然登录系统已有 JWT 令牌,为什么还要单独搞一套 PAT?
核心原因是鉴权分流(设计说明见 pat.py 模块注释):
| 维度 | 登录 JWT | MCP PAT |
|---|---|---|
| 用途 | 网页登录会话 | 分发给外部 MCP 客户端的长期凭据 |
| 生命周期 | 会话态、30 天 | 可设 1~3650 天或永不过期 |
| 吊销能力 | 不支持单独吊销 | 一键吊销,立即失效 |
| 权限范围 | 全站 | 仅mcp:read(只读) |
分流是双向的:PAT 不是合法 JWT,进不了普通 API;JWT 也过不了 MCP 端点的 PAT 校验。这保证了即便登录令牌泄露,也拿不到 MCP 数据通道;反之亦然。
三步签发并使用 PAT
操作入口在设置页 → MCP 令牌区块(前端组件 PatSection.tsx),整个流程不到一分钟:
1. 创建令牌
输入一个便于识别的名称(如claude-desktop),点击创建。后端默认签发mcp:read只读 scope、90 天有效期(见 pats.py)。
2. 立即复制明文
⚠️明文令牌只在创建成功时返回一次,页面会以醒目提示框展示并附复制按钮;此后列表里只保留前 14 位前缀(如pwmcp_a1b2c3d4…)。请务必第一时间保存到密码管理器中。
3. 配置 MCP 客户端
在 MCP 客户端中把 URL 指向http://你的地址/mcp,请求头带上Authorization: Bearer pwmcp_...。端点支持initialize、tools/list、tools/call等标准方法(处理逻辑见 mcp.py)。
安全设计拆解:这个 PAT 凭什么"最小权限"
🔒 明文永不落库
创建时系统只把令牌的sha256 摘要存入token_hash字段(数据模型见 models.py)。即使数据库泄露,攻击者拿到的也是不可逆的哈希。而校验时特意不用 bcrypt——因为 256bit 随机熵的令牌不像密码需要抗暴破,sha256 加常数时间比较既快又安全(每次 tool call 都要校验,性能很重要)。
⏱️ 防时序攻击
校验使用hmac.compare_digest做常数时间比较(verify_pat_hash),避免攻击者通过响应时间差逐字节猜解令牌。
📖 只读 + 白名单双重保险
- scope 白名单里只有
mcp:read,请求mcp:write等会被直接拒绝(pats.py); - MCP 端点只暴露助手工具的只读集合,未知工具名直接报错(mcp.py)。
🚫 令牌不能管理令牌
PAT 管理接口(/api/pats)挂在**需登录(JWT)**的路由下——PAT 本身无法用来创建或吊销 PAT,防止令牌泄露后自我续期、自我升权(见 pats.py 注释)。
📋 全程审计 + 一键吊销
每次 MCP 工具调用都会写入审计日志:工具名、状态、脱敏参数摘要、耗时、来源 IP(模型定义见 MCPCallLog),日志保留 30 天。发现异常?在设置页点一下"吊销",MCP 端点随即拒绝该令牌(相关回归测试见 test_pats_api.py)。
使用最佳实践
- 一客户端一令牌:给 Claude Desktop、Cursor 等分别签发,并在名称里标注用途,吊销时互不影响;
- 设置有效期:默认 90 天,到期自动失效,比"永不过期"更安全;
- 定期查看"最后使用时间":列表中展示了最近使用时间与 IP,长期不用或来源陌生的令牌建议直接吊销;
- 别把令牌提交进代码库:
pwmcp_前缀正是为了被 secret 扫描器识别,若不小心入库,第一时间吊销重发。
PanWatch 的 PAT 体系把"最小权限"落到了实处:只读 scope、一次明文、哈希存储、常数时间校验、独立审计、秒级吊销。理解了这套设计,你不仅能让 MCP 客户端安全接入 PanWatch 的行情与提醒能力,也能把它当作自建服务的令牌鉴权范本。更多端点与工具实现细节,可继续查阅 MCP 服务端 与 PAT 工具模块。
【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK & US markets, powered by TradingAgents. Portfolio insights, real-time alerts & automated reports.|盯盘侠:覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考