.NET 6 最小 API 端点可以选择退出授权吗?

问题描述 投票:0回答:3

我试图编写一个小型 API,其中每个端点默认情况下都应启用身份验证,因为我不想为每个端点重复相同的

[Authorize]
属性或
.RequiresAuthorization()
调用。

我做了所有通常的

.AddAuthentication()
.AddAuthorization()
.UseAuthentication()
.UseAuthorization()
,但无论我如何参数化这些,我都无法获得未经授权的响应,除非我明确地添加该属性。

由于我有更多需要身份验证的端点,所以我更愿意用

[AllowAnonymous]

来装饰开放的端点

我什至不确定是否可以使用常规 Web API/MVC 来完成,但我当然找不到任何新的最小 API 方法。

c# asp.net
3个回答
8
投票

您可以设置 FallBackPolicy 或 DefaultPolicy

services.AddAuthorization(options =>
{
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
      .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
      .RequireAuthenticatedUser()
      .Build();
});

不仅仅是在公共 API 上使用AllowAnonymous


7
投票

您可以将

AllowAnonymous
属性添加到最小 API 端点,如下所示:

app.MapGet("/hello", [AllowAnonymous] () => "Hello, World!");

0
投票

这似乎可以使用

MapGroup
将默认值应用到无前缀的“根”路由组并从那里映射端点:

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

// Create root route builder
// Authentication enforced by default. Opt-out via AllowAnonymous()
var routes = app.MapGroup(prefix: "").RequireAuthorization();

routes.MapGet("authed", () => "Authenticated by default");
routes.MapGet("anon", () => "Hello anon").AllowAnonymous();

(不确定指定空前缀是否有任何缺点)

© www.soinside.com 2019 - 2024. All rights reserved.