.NET 6 Minimal API能否设置默认授权、仅对公开端点标记免授权?
API全局默认授权配置方案
以下方案同时支持常规Web API/MVC和.NET 6+ Minimal API场景,实现所有端点默认要求授权,仅标记匿名访问的端点可公开访问。
通用最简方案:配置授权回退策略
直接在授权服务注册时配置FallbackPolicy即可,该策略会自动作用于所有没有显式配置授权规则的端点:
builder.Services.AddAuthorization(options => { // 配置回退策略:默认要求所有访问用户已认证 options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); });
公开端点配置
- 常规Web API/MVC:在需要公开的Controller或Action上添加
[AllowAnonymous]特性即可 - Minimal API:在公开端点的映射链式调用中添加
.AllowAnonymous()即可,示例:app.MapGet("/public/health", () => "服务正常").AllowAnonymous();
可选方案(按需选用)
常规Web API/MVC 全局过滤器方案
如果不想用回退策略,也可以通过全局授权过滤器实现:
builder.Services.AddControllers(options => { var authPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(authPolicy)); });
Minimal API 路由组方案
如果你的接口路由规则统一,可通过统一路由组实现全局授权:
// 定义全局带授权的根路由组,所有业务接口都挂载在该组下 var apiGroup = app.MapGroup("/api").RequireAuthorization(); // 业务端点示例 apiGroup.MapGet("/user/info", () => new { Name = "张三" }); apiGroup.MapPost("/order/create", (OrderInfo info) => /* 业务逻辑 */); // 公开端点单独定义,不需要挂载到授权组 app.MapGet("/public/config", () => new { Version = "1.0.0" }).AllowAnonymous();
注意事项
请严格保证中间件的注册顺序,必须先注册UseAuthentication,再注册UseAuthorization,且两个中间件要放在端点映射之前:
var app = builder.Build(); app.UseHttpsRedirection(); // 认证中间件必须在授权中间件之前 app.UseAuthentication(); app.UseAuthorization(); // 端点映射放在最后 app.MapControllers(); app.Run();
内容的提问来源于stack exchange,提问作者romeozor
相关产品推荐
相关产品推荐

