首页 > 解决方案 > AuthorizeFilter 失败时如何返回 403 而不是重定向访问被拒绝

问题描述

在 Startup.ConfigureServices() 我配置授权过滤器是这样的:

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

我使用基于配置的 cookie 身份验证或 AAD 身份验证:

if (useCookieAuth)
{
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie();
}
else
{
    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
       .AddAzureAD(options => Configuration.Bind("Authentication:AzureAd", options));
}

现在,当我访问一个页面并myAuthorizationPolicy失败时,我被重定向到“Account/AccessDenied?ReturnUrl=%2F”,但我想返回 403。

标签: c#asp.net-coreasp.net-core-mvcasp.net-core-2.2

解决方案


看来您必须覆盖 OnRedirectToAccessDenied

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => {
        options.Events.OnRedirectToAccessDenied = context => {
             context.Response.StatusCode = 403;
             return Task.CompletedTask;
        };
    });

推荐阅读