跳转到主要内容
hs-sql-agent
2.0.2
文档 2.0.2
文档 集成

ASP.NET Core 集成

在现有 ASP.NET Core 应用中组合 HsSqlAgent.Server capability,可沿用宿主身份验证,也可按需启用内置管理体验。

HsSqlAgent.Server 是可嵌入的 ASP.NET Core 类库包。hs-sql-agent 的新集成从无 options 的 core 开始,再明确选择宿主真正需要的 capability。

宿主认证 + Admin API 保留现有 Cookie/JWT/OIDC 登录与权限体系,不要求 hs-sql-agent 前端或身份 schema。
按需添加 MCP 把 /mcp 机器访问面与人类/Admin 授权分开选择。
内置管理体验 只有宿主需要时才启用 hs-sql-agent 的 JWT/member/role 身份和内置管理界面。

安装

dotnet add package HsSqlAgent.Server

已有自己的登录和权限系统

如果现有 ASP.NET Core 应用已经完成身份验证和授权,推荐采用这种嵌入方式。

  1. 保留宿主原有认证和授权设置
    builder.Services.AddAuthentication(/* your existing schemes */);
    
    builder.Services.AddAuthorization(options =>
    {
        options.AddPolicy("SqlAgentAdmin", policy =>
        {
            policy.RequireAuthenticatedUser();
            // Add your application's requirement/handler here when
            // canonical hs-sql-agent permissions need to be evaluated.
        });
    });

    HsSqlAgent 不会替换宿主默认 authentication scheme、authorization policy provider 或默认 authorization policy。

  2. 只组合需要的 hs-sql-agent capability
    var hs = builder.Services.AddHsSqlAgentCore();
    
    hs.AddHsSqlAgentRuntime();
    
    hs.AddHsSqlAgentAdminStore(options =>
    {
        options.Provider = "Postgres";
        options.ConnectionString =
            builder.Configuration.GetConnectionString("HsSqlAgent")!;
    });
    
    hs.AddHsSqlAgentHostAuthorization("SqlAgentAdmin");
    hs.AddHsSqlAgentAdminApi();

    这种模式下不要调用 AddHsSqlAgentBuiltInAuth(),而是直接使用宿主已经认证的 HttpContext.User。

  3. ASP.NET Core pipeline 由宿主负责
    var app = builder.Build();
    
    app.UseAuthentication();
    app.UseAuthorization();
    
    app.UseHsSqlAgentAdminApi();
    app.MapControllers();
    
    app.Run();

    UseHsSqlAgentAdminApi() 不会替宿主调用 MapControllers();ASP.NET Core 控制器 endpoint mapping 仍由应用自己决定。

host-authorization 模式下,HsSqlAgent 不发布内置 AuthController、MemberController、RoleController,也不会安装 HsSqlAgent 身份 schema,因此无需配置 JWT、SMTP、密码重置和 OIDC options。

HsSqlAgent Admin permission filter 会通过 HsSqlAgentPermissionResource.Permissions 把稳定的 canonical permission key 交给宿主策略。宿主可以只做粗粒度 Admin 角色判断,也可以把这些 key 映射到自己的细粒度权限模型。

独立添加 MCP

MCP 是单独的机器访问安全边界。只有嵌入应用确实需要暴露 MCP server 时才添加:

hs.AddHsSqlAgentMcp(options =>
{
    options.PublicEndpoint = "https://example.com/mcp";
    options.HmacSecretKey = builder.Configuration["HMAC_KEY"]!; // >= 32 bytes
});

应用构建后再挂载:

app.UseHsSqlAgentMcp();

MCP 密钥、工具范围、表范围、限流和 HMAC 校验与人类/Admin 的 host-authorization policy 相互独立。

只有需要时才启用内置 Admin 身份

如果应用需要 HsSqlAgent 自己的 JWT/member/role 模型,应显式选择该 capability,而不是 host authorization:

var hs = builder.Services.AddHsSqlAgentCore();

hs.AddHsSqlAgentRuntime();

hs.AddHsSqlAgentAdminStore(options =>
{
    options.Provider = "Sqlite";
    options.ConnectionString = "Data Source=hsagent.db";
});

hs.AddHsSqlAgentBuiltInAuth(options =>
{
    options.Jwt.SecretKey = builder.Configuration["JWT_KEY"]!; // >= 32 bytes
});

hs.AddHsSqlAgentAdminApi();

内置 authentication scheme 使用独立名称:HsSqlAgent.Jwt、HsSqlAgent.ExternalCookie、HsSqlAgent.Oidc,不会成为宿主应用的默认 scheme。内置身份与 host-authorization 模式互斥。

内置 Admin UI 也是可选项:

app.UseHsSqlAgentAdminApi();
app.MapControllers();
app.UseHsSqlAgentAdminUi();

不使用内置 UI 时,宿主自己的前端仍可以调用 Admin API。

各 capability 负责的 options

新代码应在拥有该设置的 capability 上进行配置:

Capability负责的配置
AddHsSqlAgentRuntime()bootstrap、operability、cache、rate limiting、security-policy sync、outbound-delivery sync、SQL concurrency、DML approval store
AddHsSqlAgentAdminStore()Admin database provider 和 connection string
AddHsSqlAgentBuiltInAuth()JWT、password reset/SMTP、enterprise identity/OIDC
AddHsSqlAgentHostAuthorization()委托给已有 ASP.NET Core authorization policy
AddHsSqlAgentMcp()公共 MCP endpoint 和 MCP-key HMAC secret
AddHsSqlAgentAdminApi()HsSqlAgent 管理控制器以及 controller scoped validation/exception mapping
AddHsSqlAgentTelemetry()Prometheus 和 OTLP 设置

未选择的 capability 不会分配或校验自己的 options。模块化 API 保留现有默认值;选择 host authorization 不会强迫应用配置内置 JWT/OIDC/SMTP。

当前 HTTP 接口挂载位置

接口当前 mount
MCP endpoint/mcp
Admin API prefix/api
Admin UI/

hs-sql-agent 中这些 mount 是刻意固定的。在 routing、frontend base path/assets、callback 和安全边界能够一起迁移之前,不宣传支持任意重定位。

旧版兼容

已有包使用方仍可以继续使用聚合 API:

builder.Services.AddHsSqlAgent(options =>
{
    // Existing aggregate configuration.
});

var app = builder.Build();
app.UseHsSqlAgent().ServeAdminUi();

HsSqlAgentServiceOptions、AddHsSqlAgent()、UseHsSqlAgent() 继续作为兼容接口保留。新集成应优先使用 AddHsSqlAgentCore() 加显式 capability 注册。

相关文档