Как изменить атрибут авторизации по умолчанию в ASP. NET Core? - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужно изменить атрибут Authorize по умолчанию, чтобы он перенаправлялся в представление Not Found вместо представления по умолчанию Access Denied, как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2020

Вы можете использовать эту конфигурацию для изменения AccessDeniedPath , LogoutPath и LoginPath путь в ConfigureServices метод в классе запуска

public void ConfigureServices(IServiceCollection services)
{
    //
    services.ConfigureApplicationCookie(options =>
            {
                options.AccessDeniedPath = "/AccessDenied";//<--NOTE THIS
                options.LogoutPath = "/Acconut/LogOut";
                options.Cookie.HttpOnly = true;
                options.ExpireTimeSpan = TimeSpan.FromDays(15);
                options.LoginPath = "/Account/Login";
                options.ReturnUrlParameter = "returnUrl";
                options.SlidingExpiration = false;
                options.Cookie.IsEssential = true;
                options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
            });
    //
}
1 голос
/ 19 апреля 2020

Вы можете создать политику (например, [Authorize (Policy = "NotFoundPagePlolicy")]), и политика будет зарегистрирована в Startup.cs приложения для выполнения некоторого блока кода.

В Startup / ConfigureServices ( ):

services.AddAuthorization(options =>
{
    options.AddPolicy("NotFoundPagePlolicy", 
        policy => policy.Requirements.Add(new Authorization.NotFoundPagePloliyRequirement()));
}); 

В контроллере:

[Authorize(Policy = "NotFoundPagePlolicy")]

В NotFoundPagePloliyRequirement.cs:

public class NotFoundPagePloliyRequirement: AuthorizationHandler<NotFoundPagePloliyRequirement>, IAuthorizationRequirement
{
        public override void Handle(AuthorizationHandlerContext context, NotFoundPagePloliyRequirement requirement)
        {
// Your custom code code 
        }
    }

Подробнее, см. https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1

0 голосов
/ 19 апреля 2020

Похоже, вы хотите переопределить событие onRedirecttoAccessDenied. Вы можете сделать это внутри ConfigureServices метода класса Startup.

        services.ConfigureApplicationCookie(options =>
        {
            options.Events.OnRedirectToAccessDenied = context =>
            {                    
                context.Response.StatusCode = StatusCodes.Status404NotFound;                    
                return Task.CompletedTask;
            };
        });           
...