AgentRQ安全模型全景图:OAuth2、AES-GCM加密与多层权限防护
【免费下载链接】agentrqAgentRQ: Human-in-loop realtime conversational task manager for AI Agents. Self-hosted! Control your own agents from wherever you want Mobile, Web, Desktop. Designed to work well with your own Claude subscriptions and any harness with ACP support.项目地址https://gitcode.com/gh_mirrors/ag/agentrq点击查看免费下载AgentRQ 是一款自托管的 Human-in-loop人在回路AI Agent 实时任务管理工具它的核心安全模型由三大支柱构成标准OAuth2授权流程、AES-GCM 加密存储的 Workspace 令牌以及覆盖工具调用的多层权限防护机制。无论你是想在团队内部署一套安全的 Agent 调度平台还是单纯好奇让 AI 替我干活时如何保证它不越权这篇指南都能帮你快速看懂 AgentRQ 是如何把密钥、令牌和审批流层层锁死的。一、安全边界全景图谁访问谁用什么凭证AgentRQ 把系统划分为几类清晰的边界每一类都有独立的认证机制。完整定义可以在架构文档 ARCHITECTURE.md 的 Security Boundaries 一节找到核心内容如下安全边界认证机制Supervisor Agent ↔ Core MCP 服务OAuth2 JWT 访问令牌audience 为coremcp用户级作用域Worker Agent ↔ 单 Workspace MCPWorkspace 令牌AES-GCM 静态加密传输中为 Bearer 令牌仅限一个 workspace人类用户 ↔ REST APIJWT会话 Cookie 或 Authorization 头权限门控Auto-allow 规则 SSE 推送 MCP 通知的人工审批流Workspace 隔离每个 workspace 的 MCP 服务只作用于本 workspace禁止跨 workspace 工具调用限流 / DDoS 防护按用户请求计数 按 IP 计数并可配置封禁时长这个设计的精髓在于**一个凭证只干一件事**人的令牌、Agent 的令牌、终端票据、OAuth 同意票据全部互相隔离任何一张偷来的票据都换不来第二种权限。二、OAuth2 授权人类必须亲手按下 AllowAgentRQ 同时对外暴露两类 MCP 服务面向 Supervisor Agent 的 Core MCP/mcp和面向 Worker Agent 的单 Workspace MCP/mcp/{workspaceId}。两者的认证细节都写在 auth.md 中。对新手来说最关键的一条设计原则是任何凭证都以某个人的名义签发且必须由本人在浏览器中批准。Agent 自己无法注册账号、无法自行换取令牌因此授权服务器元数据里根本没有agent_auth通道。授权码流程人类始终在回路里Agent 把用户的浏览器带到/oauth2/authorize附带response_typecode、client_id、redirect_uri与state用户未登录则先登录 AgentRQ用户看到同意页面——上面写清楚哪个应用在申请、它能做什么、回调地址在哪里然后亲手按Allow或Deny允许后应用拿到code用它去/oauth2/token换取访问令牌。同意页面由后端独立渲染见 consent.go而不是由前端 Vue 应用渲染。源码注释写得很直白这样任何 Agent 能驱动的东西——WebMCP 工具或 REST API——都无法替某人按下 Allow。防 CSRF、防重放同意令牌绑定人 请求同意页面提交时携带的 OAuth Consent Token 会同时校验三件事见 jwt.goSubject必须是渲染此页面的那个人Audience必须是oauth_consent其他类型的令牌一概不认完整载荷应用 ID、资源、redirect_uri、state必须与授权请求逐字段一致。这意味着你为 A 应用批准的授权绝不能被挪到 B 应用或另一个回调地址上使用。整个同意令牌只有10 分钟有效期超时就得重新走一遍流程。客户端注册也自带反 SSRF 装甲AgentRQ 支持 RFC 7591 动态客户端注册还支持较新的CIMDClient ID Metadata Document方案——让client_id直接是一个 HTTPS 元数据文档 URL。由于这个 URL 由调用方提供服务端在 cimd.go 中做了非常激进的加固自行解析 DNS任何解析结果落在回环、内网、链路本地地址的请求直接拒绝额外封锁 NAT6464:ff9b::/96、6to4 等能把 IPv4 藏进 IPv6的地址段堵住重绑定攻击绝不跟随 HTTP 重定向响应体限制 5KB只接受 200 状态码明确拒绝client_secret字段——CIMD 客户端永远不能是共享密钥型机密客户端。三、AES-GCM 加密Workspace 令牌如何入库即密文Worker Agent 连接 Workspace MCP 时用的凭证是一个 16 字符的 Workspace 令牌。这个令牌在数据库里从不以明文存储——它使用 AES-256-GCM 加密密钥来自服务端 32 字节的配置项。加密实现位于 security.go几个值得新手注意的工程细节GCM 模式自带完整性校验解密时若密文被篡改或 nonce 被重放gcm.Open会直接报错而不是解出一串乱码让你误以为是合法数据每次加密随机生成新 noncecrypto/rand产生避免同一明文同一密文的模式泄露密钥长度强制校验不是 32 字节直接拒绝错误信息明确提示 key must be 32 bytes for AES-256同文件还提供两个防君子工具函数GenerateSecret用crypto/rand.Int生成无模偏差的随机密钥串用于各种 secret 的初始生成SecureCompare基于crypto/subtle.ConstantTimeCompare的常数时间比较防止通过响应耗时差异发动时序攻击。一句话总结令牌在磁盘上是密文在网络上是 Bearer 头在验证时是常数时间比较——三个环节各管一段。四、JWT 受众隔离一张令牌只配一个工牌AgentRQ 的所有令牌都是 HS256 签名的 JWT但真正的安全感来自audience受众隔离。jwt.go 中定义了多组互不通用的受众凭证类型Audience有效期用途人类访问令牌actor:human24 小时浏览器/桌面应用的会话令牌刷新令牌refresh:human2 天换发新会话刻意缩短因为无法吊销终端票据terminal_ticket 会话 ID1 分钟打开某个终端 WebSocket浏览器票据browser_ticket1 分钟Chrome 扩展的浏览器 socketOAuth 同意令牌oauth_consent10 分钟同意页面提交授权码workspace ID authorization_code2 分钟OAuth 授权码交换几个设计非常值得借鉴短命票据走 URL 传输。终端/浏览器票据会出现在 URL 查询串里可能被代理日志、shell 历史记录看到所以只给 1 分钟寿命每次重连重新签发绝不复用刷新令牌刻意不带 email/name 字段每次刷新都从数据库现查现签发避免一个月前的旧名字复活所有校验函数都强制检查签名算法必须是 HMAC防算法混淆攻击即伪造algnone或换成非对称算法的常见 JWT 攻击。五、多层权限防护Agent 调用工具前先过三关光有身份认证还不够AgentRQ 对Agent 的每一次工具调用都做了门控。第一关Workspace 隔离每个 workspace 有独立的 MCP 服务实例Worker Agent 认证成功后只能看到自己这个 workspace——它的任务、消息、记忆、技能看不到隔壁 workspace 的任何东西。跨 workspace 的操作必须走 Supervisor 通道的 OAuth2 用户级令牌。第二关Auto-allow 规则Workspace 可以配置免审批工具清单见 autoallow.go。规则有三种粒度MCP 工具mcp_servername_toolname精确匹配Shell 工具Bash:git *这类基础命令通配git status放行rm -rf不放行普通工具按工具名精确匹配如Read、Write。第三关人工审批流未命中 auto-allow 规则的危险操作Agent 的调用会挂起等待人类批准请求经 SSE 推送到你的 Web/移动端界面你在手机上点一下 Allow 或 Deny结果再通过 MCP 通知回 Agent。这正是 AgentRQ Human-in-loop 名的由来——AI 跑得再快油门也在人手里。此外还有按用户的请求限流workspace/task/message/telemetry/import 各自独立计数见 ratelimit.go和可配置的按 IP DDoS 防护默认 20 请求/秒、超限封禁 5 分钟见 .env.example 中的AGENTRQ_DDOS_*配置。六、守护进程侧机器凭证也有一层保险当你用agentrqd守护进程把本机注册到 AgentRQ 时机器令牌machine token的保管同样讲究注册必须人在机器前一次性注册码由人亲手敲进目标机器的终端没有远程注册通道见 enrol.go令牌落盘即最小权限每个 profile 一个独立文件权限0600父目录0700——即使文件被读出目录权限也挡住了到底有哪些 profile这种元信息泄露见 store.go文件路径构造处会二次校验 profile ID 字符集专门防御目录穿越攻击。七、总结AgentRQ 安全模型的三层纵深层级机制防的是什么身份层OAuth2 授权码 人工同意页 JWT 受众隔离冒用身份、CSRF、令牌跨场景重放数据层AES-GCM 加密静态令牌 常数时间比较 强随机密钥生成数据库拖库、时序攻击、弱密钥行为层Workspace 隔离 auto-allow 规则 人工审批 限流/DDoS 防护Agent 越权操作、跨空间窥探、接口滥用对自托管用户来说这套模型意味着三件实在的事你持有自己的 Claude 订阅和机器凭证永远签发在你的服务器名下Agent 的能力边界由你划定从精确到单条命令每一类风险都有对应的最小化凭证令牌泄露的爆炸半径被压缩到一个用途、一分钟到两天。如果想深入源码推荐按这条路径阅读security.go → jwt.go → cimd.go → auth.md → consent.go基本就能把 AgentRQ 的整个安全模型走通一遍。赞分享【免费下载链接】agentrqAgentRQ: Human-in-loop realtime conversational task manager for AI Agents. Self-hosted! Control your own agents from wherever you want Mobile, Web, Desktop. Designed to work well with your own Claude subscriptions and any harness with ACP support.项目地址https://gitcode.com/gh_mirrors/ag/agentrq点击查看免费下载相关推荐OmniRoute 安全模型与加固实践从提示注入防护到 AES-256-GCM 静态加密OmniRoute 安全模型与加固实践从提示注入防护到 AES 256 GCM 静态加密 本文以 OmniRoute 的官方安全策略 docs/i18n/e后端API网关LLM 网关人工智能大模型MCP 服务桌面应用douyin-downloader 抖音去水印批量下载教程从一条链接到整页归档douyin downloader 抖音去水印批量下载教程从一条链接到整页归档 凌晨刷到关注的美食博主把账号清空收藏夹里十几条视频一夜之间全部失效你只能挨网页爬虫CLIOmniRoute 安全模型深度解读从漏洞披露到 AES-256-GCM 加密与 Guardrails 防护体系OmniRoute 安全模型深度解读从漏洞披露到 AES 256 GCM 加密与 Guardrails 防护体系 本文围绕开源项目 OmniRoute 的官方后端API网关LLM 网关人工智能大模型MCP 服务桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考