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

Luk*_*wej 55 authorize-attribute asp.net-authorization asp.net-core-mvc

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

我知道如何注册全局过滤器 - 例如我有:

Setup.cs

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我无法为授权添加相同的内容:

options.Filters.Add(new AuthorizeAttribute());

我有错误:

Cannot convert from 'Microsoft.AspNet.Authorization.AuthorizeAttribute()' to 'System.Type'

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


我知道 - 从类似的问题 - 这适用于MVC4-5 ......所以必须在MVC Core上改变...

有人有什么想法吗?

blo*_*art 92

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

  • 因此,ASP.NET Core有多种方式来获取身份.有内置的身份片,还有Azure Active Directory,Facebook.Twitter,有JSON Web Tokens,我甚至写过基本身份验证.这些都可以在一个应用程序中运行.所以当我说"任何身份"时,我指的是任何身份中间件构建的身份.仍然必须对用户进行身份验证.如果您使用的只是ASP.NET身份的东西,您不必担心,但如果您开始使用更多,您可能也希望通过身份验证类型限制... (2认同)

Roh*_*noy 5

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

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));
        })`
Run Code Online (Sandbox Code Playgroud)

将此添加到 StartUp.cs 中的配置方法。

app.UseAuthentication();
Run Code Online (Sandbox Code Playgroud)

注意:对于不需要的地方使用[AllowAnonymous]