Как AuthorizeFilter работает с AuthorizeAttribute, примененным к странице? - PullRequest
0 голосов
/ 15 мая 2019

Когда я подал локально:

[Authorize(Policies.ManagesProducts, AuthenticationSchemes = AuthSchemes.Cookies)]

Авторизация работает отлично. Тем не менее, для глобального фильтра я получаю

services.AddMvc(opt =>
    {
        var authorize = new AuthorizeFilter(
            new IAuthorizeData[]
            {
                new AuthorizeAttribute {AuthenticationSchemes = AuthSchemes.ConnectDeviceCookies}
            });
        opt.Filters.Add(authorize);
    })

Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler: Debug: AuthenticationScheme: Cookies были успешно аутентифицированы. Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Информация: авторизация не пройдена. Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker: Trace: фильтр авторизации: после выполнения OnAuthorizationAsync для фильтра Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter. Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker: Информация: авторизация не выполнена для запроса в фильтре «Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter». Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker: Trace: перед выполнением результата действия Microsoft.AspNetCore.Mvc.ForbidResult. Microsoft.AspNetCore.Mvc.ForbidResult: Информация: Выполнение ForbidResult со схемами аутентификации (Cookies). Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler: Информация: AuthenticationScheme: Cookies были запрещены. Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker: Trace: после выполнения результата действия Microsoft.AspNetCore.Mvc.ForbidResult.

Для страницы, на которую пользователь перенаправляется после входа в систему.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

В ядре asp.net вы не можете добавить AuthorizeAttribute в MvcOptions.Filters. Создайте AuthorizationPolicy и используйте AuthorizeFilter

var policy = new AuthorizationPolicyBuilder()
    .AddAuthenticationSchemes(AuthenticationScheme)
    .Build();

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

См. здесь

0 голосов
/ 15 мая 2019

Это потому, что вы ограничиваете доступ ко всем контроллерам, включая действие входа в систему.Чтобы это работало, вам нужно применить AllowAnonymousAttribute к действию входа в систему (GET и POST), чтобы позволить неаутентифицированным пользователям войти в систему.

...