Expand description
MCP 请求鉴权:bearer token → 已认证主体。
流程(每请求):
- axum
from_fn中间件mcp_auth_middleware解析Authorization: Bearer ygg_...; - SHA-256 哈希后在
mcp_tokens表常量查找未撤销、未过期的行; - 命中则把
McpPrincipal{ user_id, scope, token_id } 注入 request.extensions, 并异步刷新last_used_at; - 未命中/缺失 → 401(不区分原因,避免探测)。
Origin→403、协议版本头、体积上限由 rmcp 的 StreamableHttpServerConfig 内置,
本模块只管 bearer 鉴权。McpPrincipal 经 rmcp 的 Extension<http::request::Parts>
提取器在工具内读取(见 server.rs)。
Structs§
- McpPrincipal
- 已认证主体:由中间件注入 request.extensions,工具经 Extension 提取器读取。
Constants§
- LAST_
USED_ 🔒REFRESH_ SECS last_used_at刷新节流:同一令牌的 UPDATE 至少间隔 60s,避免高频请求 每次都写库。窗口外才刷新,窗口内跳过(best-effort,失败静默)。- TOKEN_
PREFIX - Bearer token 前缀(明文形式以
ygg_起头,便于人眼识别与日志脱敏)。
Statics§
- MCP_
LIMITER 🔒 - MCP 鉴权中间件:无 bearer 或 token 无效 → 401;否则注入 McpPrincipal。
- MCP_
UPLOAD_ 🔒LIMITER - MCP 上传专用限流(与 MCP_LIMITER 隔离):上传是重操作(转码 + 落盘), 单独配额避免一个高频令牌的普通请求耗尽上传额度,反之亦然。 阈值经 RATE_LIMIT_MCP_UPLOAD_PER_SEC / _BURST 可调(默认 2/s, burst 5)。
Functions§
- check_
mcp_ 🔒upload_ limit - bearer 端点专用:按 token_id 检查上传配额。超限返回 Err(脱敏消息)。
- extract_
bearer - 从 Authorization 头解析 bearer 明文(去前缀后返回完整 token 字符串)。 非 bearer、缺前缀、解码失败统一返回 None。
- hash_
token - 明文 token → SHA-256 hex(与 mcp_tokens.token_hash 列一致,用于 DB 查找)。
- mcp_
auth_ middleware - mcp_
rate_ 🔒burst - mcp_
rate_ 🔒per_ sec - mcp_
upload_ 🔒rate_ burst - mcp_
upload_ 🔒rate_ per_ sec - resolve_
bearer_ 🔒principal - bearer 端点鉴权:从 Authorization 头解析 bearer → 查库解析主体。
- resolve_
principal 🔒 - 查库解析 token → 主体;未撤销、未过期才返回 Some。