OAuth 2.1 · OpenID Connect · MCP
面向智能体时代的授权服务器。
FoxAuth 构建于 OAuth-server.ts 之上,这是一个由你自行运行、源码可用的 OAuth 2.1 / OpenID Connect 服务器。它自带管理控制台和银行级安全规范,并支持 AI 智能体通过 MCP 进行管理。
它面向需要把身份系统留在自有基础设施内的工程团队,也面向构建 AI 智能体、并要让智能体来管理它的开发者。在 Functional Source License(FSL-1.1-ALv2)下,自托管免费且功能完整;每个版本发布两年后转为 Apache 2.0 许可。
25 项规范Bun + ElysiaFSL-1.1-ALv2
curl -O https://raw.githubusercontent.com/RedFox-Soft/OAuth-server.ts/main/docker-compose.yml
docker compose up
# open http://localhost:3000/admin这两条命令为你准备好了什么
- 数据库 已启动并完成预配,带有索引和一个签名密钥
- 管理控制台 位于 /admin,首次运行时引导你设置超级管理员
- 发现文档 位于 /.well-known/openid-configuration,反映你设置的功能开关
- 无需注册 没有租户,没有 API 密钥,也不用打电话
已经在用别的方案?我们维护着与 Auth0、authentik、Keycloak、Ory Hydra 和 Zitadel 的对比,均注明日期和出处,并列出我们查阅过的页面及查阅日期。
控制台
运维所需的一切,无需第二个产品。
项目、客户端、用户桶、最终用户、上游身份提供商、SCIM 连接、设置、SMTP、签名密钥、月活跃用户,以及只追加的审计日志,全部集中在一个控制台里;登录控制台走的是服务器自身的 OpenID Connect 流程,也可以通过你所在组织的身份提供商登录。可能让人无法登录的更改,会在生效前先告诉你影响到谁。AI 智能体通过 MCP 使用的也是同一套 API。

谁在运行它
三类团队,同一个服务器。
同一个二进制文件,同一套管理 API。不同之处主要在于你打开了哪些功能开关。
面向 TypeScript 团队
基于 Bun 和 Elysia,一条命令即可运行;31 个具名扩展点可以直接换成你自己的函数,无需 fork。
- 运行在 Bun 上,HTTP 层是 Elysia
- 生产环境用 PostgreSQL 或 MongoDB,测试用内存存储
- 31 个覆盖扩展点,在调用时解析
查看全部功能
面向 AI 智能体开发者
用它保护你自己的 MCP 服务器,并让智能体沿着控制台自身的代码路径来管理实例。没有另一套需要同步维护的特权 API。
- 声明你的 MCP 服务器,即可获得受众绑定的令牌(RFC 8707)
- 支持 Client ID Metadata Documents,智能体宿主无需任何预先配置
- 126 个用于管理的 MCP 工具,设置 mcp.enabled 之前保持关闭
查看全部功能
面向受监管行业
银行级安全规范如今都已实现,没有一项还在等路线图。监管方要求哪个,就打开哪个开关。
- FAPI、DPoP、PAR、mTLS、CIBA、RAR、JARM
- 只追加的管理审计日志
- 按身份的暴力破解节流
查看全部功能
快速开始
五分钟拿到令牌。
无需注册,没有租户,也不要 API 密钥。读完三篇短文,你的终端里应该就有一个令牌了。
为 MCP 打造的 OAuth 服务器
保护你的 MCP 服务器,并让智能体来运维这一台。
把你自己的 MCP 服务器声明为某个项目的受保护资源,本服务器就会签发受众恰好是该资源的令牌。这里不用写代码,也不用重启。智能体宿主会发现它、让你的用户登录,然后带着令牌回来;你的 MCP 服务器对照公开的密钥即可验证该令牌,无需向任何一方询问。值为 HTTPS URL 的 client_id 会被当作客户端身份文档接受,因此一个什么都不用配置的宿主也能连上。
打开 mcp.enabled 后,管理 API 会以 OAuth 2.1 受保护资源的形式在 POST /mcp 上提供给 AI 智能体。这 126 个工具中的每一个都会重建控制台本应发送的请求,并执行控制台自身的权限检查、校验和审计写入,因此不存在会与控制台逐渐脱节的特权后门。
破坏性操作和影响整个实例的操作需要两次调用:第一次返回确认令牌,第二次携带该令牌。此功能默认关闭。
agent → settings_update { "deviceFlow.enabled": false }
server ← Nothing has been changed. Change server settings. The merged
configuration is validated first …
Target: settings_update
To proceed, call settings_update again with
confirmationToken="<token from the first call>".
It is valid once, until 2026-09-03T14:12:04.000Z.
agent → settings_update { "deviceFlow.enabled": false,
"confirmationToken": "<token from the first call>" }
server ← { "appliedKeys": ["deviceFlow.enabled"],
"pendingRestartKeys": [], … }
Audit: actor agent:ops-bot, action settings.update.许可
源码可用,实话实说。
代码是公开的,你可以阅读、修改、自托管和再分发——唯一不允许的是把它作为竞争性的托管服务提供给他人。每个版本发布两年后,该版本即转为 Apache License 2.0。