davidcrowe/GatewayStack
GitHub: davidcrowe/GatewayStack
一个基于 TypeScript 的模块化网关,为 LLM 代理场景提供身份验证、策略控制与审计能力,解决 AI 后端调用中的身份归属与治理难题。
Stars: 6 | Forks: 2
停止使用共享 API 密钥且无审计追踪的方式交付 AI 集成
## 问题 AI 应用包含三个角色——用户、LLM 和后端——但缺乏共享的身份层。用户向 LLM 验证身份,然后 LLM 使用共享 API 密钥调用你的后端。你的后端无法知道请求是为哪个用户发起的。 ``` Without GatewayStack With GatewayStack USER (Alice) USER (Alice) │ │ │ ✓ Authenticated │ ✓ Authenticated ▼ ▼ LLM LLM │ │ │ ❌ Shared API key │ ✓ RS256 JWT ▼ ▼ BACKEND GATEWAYSTACK │ (Verify & Inject) │ ❓ Who is this? │ │ ❓ What can they do? │ ✓ X-User-Id, scopes ▼ BACKEND │ │ ✅ Knows: Alice, scopes │ ✅ Enforces policy ``` GatewayStack 位于 LLM 与你的后端之间。它验证 OAuth 令牌,强制执行每个用户的策略,并注入已验证的身份——确保每个 AI 请求都可归因、可授权、可审计。[完整说明 →](docs/three-party-problem.md) ## 快速开始 ``` npm install @gatewaystack/identifiabl express ``` ``` import express from "express"; import { identifiabl } from "@gatewaystack/identifiabl"; const app = express(); app.use(identifiabl({ issuer: process.env.OAUTH_ISSUER!, audience: process.env.OAUTH_AUDIENCE!, })); app.get("/api/me", (req, res) => { res.json({ user: req.user.sub, scopes: req.user.scope }); }); app.listen(8080); ``` 现在每个请求都需要有效的 RS256 JWT。`req.user` 包含已验证的身份。 ## 模块 所有六个治理层均以 npm 形式提供。每个模块都包含一个 `-core` 包(与框架无关)以及一个 Express 中间件封装。[详细说明 →](docs/packages.md) | 模块 | npm | 功能 | |--------|-----|-------------| | `@gatewaystack/identifiabl` | [](https://www.npmjs.com/package/@gatewaystack/identifiabl) | RS256 JWT 验证、身份标准化 | | `@gatewaystack/transformabl` | [](https://www.npmjs.com/package/@gatewaystack/transformabl) | PII 检测、脱敏、安全分类 | | `@gatewaystack/validatabl` | [](https://www.npmjs.com/package/@gatewaystack/validatabl) | 默认拒绝策略引擎、作用域/权限强制执行 | | `@gatewaystack/limitabl` | [](https://www.npmjs.com/package/@gatewaystack/limitabl) | 速率限制、预算跟踪、代理防护 | | `@gatewaystack/proxyabl` | [](https://www.npmjs.com/package/@gatewaystack/proxyabl) | 认证模式路由、SSRF 防护、身份感知代理 | | `@gatewaystack/explicabl` | [](https://www.npmjs.com/package/@gatewaystack/explicabl) | 结构化审计日志、健康端点 | ## 完整栈示例 将六个层组合在一起。每个层都是可选的——按需使用。 ``` npm install @gatewaystack/identifiabl @gatewaystack/transformabl @gatewaystack/validatabl \ @gatewaystack/limitabl @gatewaystack/proxyabl @gatewaystack/explicabl @gatewaystack/request-context express ``` ``` import express from "express"; import { runWithGatewayContext } from "@gatewaystack/request-context"; import { identifiabl } from "@gatewaystack/identifiabl"; import { transformabl } from "@gatewaystack/transformabl"; import { validatabl } from "@gatewaystack/validatabl"; import { limitabl } from "@gatewaystack/limitabl"; import { createProxyablRouter, configFromEnv } from "@gatewaystack/proxyabl"; import { createConsoleLogger, explicablLoggingMiddleware } from "@gatewaystack/explicabl"; const app = express(); app.use(express.json()); // 1. Establish request context for downstream layers app.use((req, _res, next) => { runWithGatewayContext( { request: { method: req.method, path: req.path } }, () => next() ); }); // 2. Log every request app.use(explicablLoggingMiddleware(createConsoleLogger())); // 3. Require verified RS256 token app.use(identifiabl({ issuer: process.env.OAUTH_ISSUER!, audience: process.env.OAUTH_AUDIENCE!, })); // 4. Detect PII and classify content safety app.use("/tools", transformabl({ blockThreshold: 80 })); // 5. Enforce authorization policies app.use("/tools", validatabl({ requiredPermissions: ["tool:read"], })); // 6. Apply rate limits and budget caps app.use("/tools", limitabl({ rateLimit: { windowMs: 60_000, maxRequests: 100 }, budget: { maxSpend: 500, periodMs: 86_400_000 }, })); // 7. Route /tools to your tool/model backends app.use("/tools", createProxyablRouter(configFromEnv(process.env))); app.listen(8080, () => { console.log("GatewayStack running on :8080"); }); ``` 或者直接克隆并运行参考网关: ``` git clone https://github.com/davidcrowe/GatewayStack cd GatewayStack npm install npm run dev # gateway on :8080, admin UI on :5173 ``` ## GatewayStack 与传统 API 网关对比 | 功能 | Kong / Apigee / AWS API Gateway | GatewayStack | |---------|--------------------------------|--------------| | JWT 验证 | 内置 | 内置 | | 速率限制 | 内置 | 内置 | | 路径/方法路由 | 内置 | 内置 | | 用户身份标准化 | 手动(自定义插件) | 内置 | | 三方身份绑定(LLM → 后端) | 手动(自定义逻辑) | 内置 | | 工具级作用域强制执行 | 手动(自定义策略) | 内置 | | PII 检测与脱敏 | 不可用 | 内置 | | 内容安全分类 | 不可用 | 内置 | | 预检预算检查 | 手动(自定义插件) | 内置 | | 代理失控防护 | 不可用 | 内置 | | 应用 SDK / MCP 合规性 | 手动(PRM 端点) | 内置 | | AI 审计追踪 | 手动(日志转发) | 内置 | ## 仓库结构 | 路径 | 说明 | | ---- | ----------- | | `packages/` | 六个 `-core` 包(与框架无关)+ 六个 Express 中间件封装,以及 `request-context`、`compat` 和 `integrations` | | `apps/gateway-server` | Express 参考服务器,封装全部六个层,提供 `/protected/*` 示例并包含 Docker 镜像 | | `apps/admin-ui` | 基于 Vite/React 的仪表盘,定期轮询 `/health` | | `demos/` | MCP 发行器与 ChatGPT Apps SDK 连接器,用于生成演示 JWT | | `tools/` | 回声服务器、模拟工具后端、云运行部署辅助工具 | | `tests/` | Vitest 冒烟测试 | | `docs/` | Auth0 教程、符合性输出、端点参考、故障排除 | ## 测试 ``` npm test ``` 共 135 个测试,覆盖 17 个测试文件中的所有五个核心包。 ## 前置条件 - Node.js **20+** - npm **10+**(或 pnpm 9) - 提供 RS256 访问令牌的 OIDC 提供商(Auth0、Okta、Entra ID、Keycloak 等) ## 文档 - [三方问题](docs/three-party-problem.md) - [包结构分解](docs/packages.md) - [示例](docs/examples.md) - [演示](docs/demo.md) - [环境与健康端点](docs/operations.md) - [部署](docs/deployment.md) - [故障排除](docs/troubleshooting.md) - [生产检查清单](docs/production-checklist.md) ## 贡献 - 运行测试:`npm test` - 阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md) - 在 [GitHub Issues](https://github.com/davidcrowe/GatewayStack/issues) 报告问题 欲了解企业版与领导层推介,请访问 [agenticcontrolplane.com](https://agenticcontrolplane.com)。标签:Agentic Control Plane, AI后端, AI治理, AI集成, API密钥管理, Auth0, Cloud Run, LLM调用, MCP认证, MITM代理, RS256 JWT, SEO: Agentic Control Plane, SEO: AI治理, SEO: LLM审计, SEO: 模块化身份, SEO: 速率限制路由, TypeScript, 共享API密钥, 安全插件, 审计, 审计追踪, 工具调用, 提示词模板, 权限控制, 模块化架构, 用户身份, 自动化攻击, 路由, 身份层