AuthorizeFilter如何与应用于页面的AuthorizeAttribute一起使用?

时间:2019-05-15 15:28:39

标签: asp.net-core .net-core asp.net-core-2.2 asp.net-authorization

当我在本地申请时:

[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:跟踪:授权过滤器:在过滤器Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter上执行OnAuthorizationAsync之后。   Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:信息:筛选器“ Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter”的请求授权失败。   Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:跟踪:执行操作结果之前,Microsoft.AspNetCore.Mvc.ForbidResult。   Microsoft.AspNetCore.Mvc.ForbidResult:Information:使用身份验证方案(Cookies)执行ForbidResult。   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:信息:AuthenticationScheme:禁止使用Cookie。   Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:跟踪:执行操作结果后,Microsoft.AspNetCore.Mvc.ForbidResult。

用于登录后用户重定向到的页面。

2 个答案:

答案 0 :(得分:0)

这是因为您限制了对所有控制器的访问,包括登录操作。为此,您需要将AllowAnonymousAttribute应用于登录操作(GET和POST),以允许未经身份验证的用户登录。

答案 1 :(得分:0)

在asp.net核心中,您无法将AuthorizeAttribute添加到MvcOptions.Filters中。创建一个AuthorizationPolicy并使用AuthorizeFilter

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

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

请参阅here