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

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

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

Setup.cs

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

и это прекрасно работает, но я не могу добавить то же самое для авторизации:

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

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

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

(метод .Add() потребности IFilterMetadata тип)


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

У кого-нибудь есть идеи?

1 ответ

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

Добавьте следующее к вашим 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] для тех, кто вам не нужен

Другие вопросы по тегам