如何在核心中使用持有者令牌默认保护所有控制器 ASP.NET



我已经在我的应用程序中添加了一个 JWT 中间件:

app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true;} )

理想情况下,我想要实现的是默认情况下所有控制器操作都受到保护(以前的 ASP.NET 中有过滤器),如果我想要其他策略,我会将匿名放在我想要公开或授权("SomePolicy")的那些上,但我希望没有令牌,API 根本无法访问。如何在 ASP.NET 核心中执行此操作?

.Net 6开始,我们可以这样做(如果使用Microsoft推荐的最小托管模型):

app
  .MapControllers()
  .RequireAuthorization(); // This will set a default policy that says a user has to be authenticated

.Net Core 3开始,我们可以这样做:

app.UseEndpoints(endpoints =>
{
    endpoints
        .MapControllers()
        .RequireAuthorization(); // This will set a default policy that says a user has to be authenticated
});

可以更改默认策略或添加新策略并使用它。

附言请注意,即使方法名称显示"授权",默认情况下也只要求用户经过身份验证。不过,可以添加更多策略来扩展验证。

您仍然可以使用筛选器,如以下示例所示:

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                 .RequireAuthenticatedUser()
                 .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});

此示例中的策略非常简单,但有很多方法可以为各种要求、角色等配置策略。

下面的示例在使用 .NET 5 时对我有用,接受的答案似乎不适用于 .NET 5

services.AddMvc(config => {
    config.Filters.Add(new AuthorizeFilter());
});

有很多解决方案会告诉你其中的两个:-

//First one
builder.Services.AddControllers(opts =>
{
    opts.Filters.Add(new AuthorizeFilter());
});
//Second one
builder.Services.AddAuthorization(opts =>
{
    opts.FallbackPolicy = new AuthorizationPolicyBuilder()
       .RequireAuthenticatedUser() 
       .Build();
});

相关内容

  • 没有找到相关文章