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

如何为ASP.NET Core特定路由仅启用Windows身份验证?

解决方案

要实现仅对/api开头的路由启用Windows身份验证,同时让React静态资源和前端路由公开访问,需要调整授权策略和端点配置,具体步骤如下:

1. 修改授权策略配置(ConfigureServices方法)

将默认回退策略设为允许匿名访问,仅保留默认授权策略要求已认证用户,这样非API路由默认公开,API路由强制验证:

services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
services.AddAuthorization(options =>
{
    // 设置默认回退策略:所有请求默认允许匿名
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .AllowAnonymous()
        .Build();
    
    // 保留默认授权策略:要求用户已认证(用于API路由)
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

2. 调整端点与中间件配置(Configure方法)

确保静态资源优先处理,同时为API路由绑定授权策略,React单页应用的fallback路由允许匿名:

// 优先处理React静态资源(如JS、CSS、图片等)
app.UseStaticFiles();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    // 对所有/api开头的控制器路由应用默认授权策略(强制身份验证)
    endpoints.MapControllers()
        .RequireAuthorization()
        .AddRoutePattern("/api/{**slug}");

    // 处理React单页应用的路由Fallback,允许匿名访问所有前端路径
    endpoints.MapFallbackToFile("index.html")
        .AllowAnonymous();
});

补充说明

  • 如果你的控制器已经通过[Route("api/[controller]")]标记了/api前缀,也可以简化端点配置,直接对MapControllers()添加RequireAuthorization(),无需额外指定路由模式。
  • 前端路由(如/any/path/here)会被MapFallbackToFile导向index.html,该配置已设置允许匿名,因此所有前端页面都能公开访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:41