OAuth2动态客户端注册服务

Mcpd是一个基于.NET 10的OAuth2动态客户端注册服务,支持RFC 7591和RFC 7592标准的客户端注册和管理,以及令牌发放功能。

  • by pixelbadger
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 pixelbadger/Mcpd

使用说明

Mcpd-MCP动态客户端注册守护进程

Mcpd是一个。NET 10 OAuth2为MCP客户端提供的动态客户端注册服务。 当前的实现支持RFC 7591风格的注册、RFC 7592风格的具有注册访问令牌的客户端自我管理,以及 client_credentials 代币发行。

当前范围

此存储库当前实现 客户端级注册和范围. 服务器范围的授权和回调白名单已计划好,但尚未在代码中实现。

建筑

清洁建筑,包括四个项目:

src/
|- Mcpd.Domain/            # Entities, value objects, interfaces
|- Mcpd.Application/       # Use cases + in-process component interfaces/implementations
|- Mcpd.Infrastructure/    # External adapters (EF Core persistence repositories)
`- Mcpd.Api/               # FastEndpoints API + preprocessors

依赖流:

  • Mcpd.Domain 没有项目引用。
  • Mcpd.Application -> Mcpd.Domain
  • Mcpd.Infrastructure -> Mcpd.Domain (应用程序通过域合同使用的存储库实现)
  • Mcpd.Api -> Mcpd.Application 和 Mcpd.Api -> Mcpd.Infrastructure

堆栈:

  • .NET 10/C#
  • 快速端点
  • 中介(源生成的处理程序)
  • EF核心内存
  • Argon2d秘密散列
  • RSA签名的JWT(RS256)JWKS出版
  • 流式验证

入门指南

先决条件:。NET 10 SDK(项目目标 net10.0).

dotnet build Mcpd.sln
dotnet run --project src/Mcpd.Api

如果你在测试时想要一个固定的本地URL:

dotnet run --project src/Mcpd.Api --urls http://localhost:5000

API终点

FastEndpoints路线位于 /oauth JSON使用 snake_case.

注册(RFC 7591/7592样式)

方法 路径 身份验证 描述
职位 /oauth/register 无 注册客户端
得到 /oauth/register/{clientId} 持有者注册访问令牌 读取注册
PUT /oauth/register/{clientId} 承载者注册访问令牌 更新注册元数据
删除 /oauth/register/{clientId} 持有人注册访问令牌 撤销注册

代币

方法 路径 身份验证 描述
职位 /oauth/token client_secret_post 或 client_secret_basic 发放JWT访问令牌

令牌请求详细信息:

  • grant_type 必须 client_credentials
  • 凭据可能来自表单字段(client_id, client_secret)或HTTP基本身份验证
  • scope 是可选的,必须是已注册作用域的子集
  • resource (RFC 8707)或 audience 可以作为象征性受众提供

管理员

方法 路径 身份验证 描述
职位 /oauth/admin/clients/{clientId}/rotate-secret X-Admin-Key 旋转客户端机密

发现/众所周知

方法 路径 描述
得到 /.well-known/jwks.json 公共签名密钥
得到 /.well-known/oauth-authorization-server 授权服务器元数据
得到 /.well-known/openid-configuration OIDC样式元数据别名

示例

注册:

curl -s -X POST http://localhost:5000/oauth/register \
  -H "Content-Type: application/json" \
  -d '{
    "client_name": "my-app",
    "redirect_uris": ["https://app.contoso.com/oauth/callback"],
    "grant_types": ["client_credentials"],
    "token_endpoint_auth_method": "client_secret_post",
    "scope": ["read", "write"]
  }'

发行令牌:

curl -s -X POST http://localhost:5000/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=<CLIENT_ID>" \
  -d "client_secret=<CLIENT_SECRET>" \
  -d "scope=read" \
  -d "resource=code-assist"

配置

看 src/Mcpd.Api/appsettings.json.

Mcpd 本节目前包括:

  • Issuer
  • SigningKeyPath (可选PEM私钥路径)
  • DefaultTokenLifetimeMinutes
  • DefaultSecretLifetimeDays
  • AdminApiKey
  • AllowOpenRegistration
  • RequireHttpsCallbacks

RateLimiting 本节包括 Registration 和 Token 窗口/许可设置。

测试

dotnet test Mcpd.sln

存储库包括域、应用程序、基础结构和API集成/众所周知的行为的测试项目。

许可证

看 LICENSE.