【问题标题】:How does AuthorizeFilter work with AuthorizeAttribute applied to page?AuthorizeFilter 如何与应用于页面的 AuthorizeAttribute 一起工作?
【发布时间】:2019-10-02 19:26:06
【问题描述】:

当我在本地申请时:

[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:Trace:在执行操作结果之前 Microsoft.AspNetCore.Mvc.ForbidResult。 Microsoft.AspNetCore.Mvc.ForbidResult:信息:使用身份验证方案 (Cookie) 执行 ForbidResult。 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:信息:AuthenticationScheme:Cookie 被禁止。 Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker:Trace:执行动作结果Microsoft.AspNetCore.Mvc.ForbidResult后。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 它从一开始就被应用。问题不在于登录页面,而在于returnUrl中设置的页面
    • 那是登录页面。您的问题中没有提到该属性。
    【解决方案2】:

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

    var policy = new AuthorizationPolicyBuilder()
        .AddAuthenticationSchemes(AuthenticationScheme)
        .Build();
    
    services.AddMvc(options =>
    {
        options.Filters.Add(new AuthorizeFilter(policy));
    });
    

    参考here

    【讨论】:

    • 我在哪里写到我试图将AuthorizeAttribute 添加为全局过滤器?
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多