如何为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
相关产品推荐
相关产品推荐

