Подтвердить что ты не робот

MVC Core Как заставить/установить глобальную авторизацию для всех действий?

Как заставить/установить глобальную авторизацию для всех действий в MVC Core?

Я знаю, как регистрировать глобальные фильтры - например, у меня есть:

Setup.cs

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});

и это отлично работает, но я не могу добавить то же самое для Authorize:

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

У меня есть ошибка:

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

(Метод .Add() нужен тип IFilterMetadata)


Я знаю - из похожих вопросов - что это работает на MVC4-5... Так что что-то должно измениться на MVC Core...

У кого-то есть идея?

4b9b3361

Ответ 1

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

Ответ 2

Добавьте следующее к вашим ConfigureServices в StartUp.cs. Это для проверки токена и принудительной проверки всех вызовов с помощью токена.

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));
        })'

Добавьте это в метод Configure в StartUp.cs.

app.UseAuthentication();

Примечание. Используйте [AllowAnonymous] для тех, кто вам не нужен