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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:03