You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用ASP.NET Core 8 Web API的非必要Identity端点?

解决ASP.NET Core 8 Web API生产环境禁用不必要端点的方案

这些不可见的端点大概率是ASP.NET Core Identity自带的注册、密码管理类接口,以下是几种实用的禁用方案:

方法1:精准控制Identity端点的启用状态

ASP.NET Core Identity通过MapIdentityApi注册默认端点,你可以手动指定仅保留登录和刷新令牌相关接口,禁用其他所有端点:

builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

// 注册Identity端点时,按需启用/禁用
app.MapIdentityApi<IdentityUser>(options =>
{
    // 禁用不需要的端点
    options.RegisterEndpoint = false;
    options.ForgotPasswordEndpoint = false;
    options.ResetPasswordEndpoint = false;
    options.ChangePasswordEndpoint = false;
    options.LogoutEndpoint = false; // 按需选择是否禁用登出
    
    // 保留核心端点
    options.LoginEndpoint = true;
    options.RefreshEndpoint = true;
});

方法2:用中间件拦截生产环境的非法请求

如果不想修改Identity配置,可以添加自定义中间件,在生产环境下直接拦截并拒绝访问指定路径:

// 放在路由注册前(比如app.MapControllers()、app.MapIdentityApi()之前)
app.Use(async (context, next) =>
{
    if (app.Environment.IsProduction())
    {
        // 列出所有需要拦截的端点路径(根据实际路径调整)
        var forbiddenPaths = new List<string>
        {
            "/register",
            "/forgotpassword",
            "/resetpassword",
            "/changepassword",
            "/logout"
        };

        if (forbiddenPaths.Any(path => context.Request.Path.StartsWithSegments(path)))
        {
            // 返回404隐藏端点存在,或403明确拒绝访问
            context.Response.StatusCode = StatusCodes.Status404NotFound;
            return;
        }
    }

    await next();
});

方法3:用授权策略限制非生产环境访问

定义仅允许开发/测试环境访问的授权策略,给不需要的端点绑定该策略:

// 定义开发环境专属策略
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("DevelopmentOnly", policy =>
    {
        policy.RequireAssertion(context => 
            !context.HttpContext.RequestServices.GetRequiredService<IWebHostEnvironment>().IsProduction());
    });
});

// 给指定Identity端点绑定策略
app.MapIdentityApi<IdentityUser>(options =>
{
    options.RegisterEndpointMetadata.Add(new AuthorizeAttribute("DevelopmentOnly"));
    options.ForgotPasswordEndpointMetadata.Add(new AuthorizeAttribute("DevelopmentOnly"));
    // 其他需要禁用的端点同理
});

注意事项

  • 可以在开发环境启动后,通过Swagger或抓包工具确认Identity端点的实际路径,确保拦截/禁用的路径准确。
  • 选择404或403状态码:404更隐蔽,不会暴露端点存在;403则明确告知请求被拒绝。

内容的提问来源于stack exchange,提问作者mrcoulson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:39:56