Asp.net core mvc MVC核心如何强制/设置所有操作的全局授权?

Asp.net core mvc MVC核心如何强制/设置所有操作的全局授权?,asp.net-core-mvc,authorize-attribute,asp.net-authorization,Asp.net Core Mvc,Authorize Attribute,Asp.net Authorization,如何强制/设置MVC核心中所有操作的全局授权? 我知道如何注册全局筛选器-例如,我有: Setup.cs services.AddMvc(options => { options.Filters.Add(new RequireHttpsAttribute()); }); 这很好,但我不能为授权添加相同的内容: options.Filters.Add(newauthorizeAttribute()) 我有一个错误: 无法从“Microsoft.AspNet.Authorizati

如何强制/设置MVC核心中所有操作的全局授权?

我知道如何注册全局筛选器-例如,我有:

Setup.cs

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});
这很好,但我不能为授权添加相同的内容:

options.Filters.Add(newauthorizeAttribute())

我有一个错误:

无法从“Microsoft.AspNet.Authorization.AuthorizeAttribute()”转换为“System.Type”

(方法
.Add()
需要
IFilterMetadata
类型)


通过类似的问题,我知道这在MVC4-5上有效。。。所以MVC核心上的某些东西必须改变


有人知道吗?

将以下内容添加到StartUp.cs中的ConfigureServices中。这用于令牌验证,并强制所有调用使用令牌进行验证

services.AddMvc(config =>
{
    var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
    config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };
            });

services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })`
将此添加到StartUp.cs中的配置方法

app.UseAuthentication();

注意:如果您不需要[AllowAnonymous],请使用[AllowAnonymous]

让我问一下——您认为这是一种好的做法吗?我必须做WebApp供内部使用,我需要确保公众无法访问。也许还有一个问题-该(全局)解决方案是否会对性能产生任何负面影响,例如(与为每个类使用AuthorizeAttribute相比)?那么,这是一个好的做法吗?当然可以,不过这取决于身份验证方案本身。对于内部使用的API,如果可能的话,我会将它们保留在内部。请注意,这将接受任何标识,无论是来自表单还是JWT令牌。所以,在WebApi场景中,通常您只希望接受JWT,比如说,您的广告基础设施发布的JWT。就性能而言,应该是非常相同的。再次感谢您。你是老板;)然而,你的回答提出了更多的问题-我希望你不介意。。。您说“注意,这将接受任何身份,无论是来自表单还是JWT令牌”。。。你的意思是“任何,任何”或仅“任何有效”我的身份数据库?据我所知-授权属性(没有指定的策略)允许任何经过身份验证的用户访问,并阻止其他人访问?顺便说一句,它是用于Web应用程序的——就目前而言,我不打算公开任何WebApi。因此,在ASP.NET内核中有多种方法可以获得标识。有内置的标识块,有Azure Active Directory和Facebook。Twitter上有JSON Web标记,我甚至写过基本的身份验证。这些都可以在一个应用程序中运行。所以当我说“任何身份”时,我指的是由任何身份中间件构建的任何身份。但用户仍必须经过身份验证。如果您使用的只是ASP.NET身份验证,那么您不必担心,但是如果您开始使用更多的身份验证,您可能也希望通过身份验证类型进行限制。。。