ASP.Net Core MVC6 Redirecciona al inicio de sesión cuando no está autorizado

Estoy usando ASP.Net core MVC 6, estoy tratando de redirigir al usuario a la página de inicio de sesión si no están autenticados.

Parece que no puedo hacerlo funcionar, actualmente el usuario solo recibe una página en blanco.

A continuación se muestra mi método ConfigureServices en Startup.cs

public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")) ); services.AddIdentity(options => { // configure identity options options.Password.RequireDigit = true; options.Password.RequireLowercase = true; options.Password.RequireUppercase = true; options.Password.RequireNonAlphanumeric = true; options.Password.RequiredLength = 7; options.Cookies.ApplicationCookie.AutomaticAuthenticate = true; options.Cookies.ApplicationCookie.AutomaticChallenge = true; options.Cookies.ApplicationCookie.LoginPath = "/Account/Login"; // User settings options.User.RequireUniqueEmail = true; }) .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddMvc(); // Add application services. services.AddTransient(); services.AddTransient(); } 

Estaba luchando con esto yo mismo y llegué a la conclusión de que parece haber un problema en la última versión de la dependencia “Microsoft.AspNetCore.Identity.EntityFrameworkCore” .

Originalmente estaba usando la versión 1.1.0 pero después de un montón de depuración, registro de middleware owin, etc., llegué a la conclusión de que no estaba haciendo nada malo. Lo comprobé:

  • Autorizar el atributo trabajado y bloquear la solicitud.
  • Se agregaron controladores de eventos (OnRedirectToLogin) como se muestra a continuación para verificar la URL de redireccionamiento (esto fue solo para la depuración)

     options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents { OnRedirectToLogin = evt => { evt.Response.Redirect(evt.RedirectUri); // this url is correct, but the redirect never happens!?? return Task.FromResult(0); } }; 

La resolución : hice retroceder mi paquete a la versión 1.0.1 y luego las redirecciones se activaron como se esperaba, a la URL definida en Startup.cs en la configuración LoginPath

 options.Cookies.ApplicationCookie.LoginPath = new PathString("/Auth/Login"); 

Para aclarar, ESTA versión funciona: Microsoft.AspNetCore.Identity.EntityFrameworkCore “:” 1.0.1 “

Voy a plantear un error con el equipo de ASPNETCORE para investigar la versión 1.1.0.

El mismo problema aqui. Una solución rápida mientras se resuelve este problema:

 public class LogInRequiredFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { if (!AttributeManager.HasAttribute(context, typeof(LogInRequired))) return; if (context.HttpContext.User.Identity.IsAuthenticated) return; context.Result = new RedirectResult("/login?ReturnUrl=" + Uri.EscapeDataString(context.HttpContext.Request.Path)); } } public class LogInRequired : Attribute { public LogInRequired() { } } 

Y luego en su controlador:

  [HttpGet, LogInRequired] public IActionResult return View(); } 

Esto lo redirigirá a su página de inicio de sesión y luego lo redireccionará a la página original a la que desea acceder.

Código del administrador de atributos:

 public static Boolean HasAttribute(AuthorizationFilterContext context, Type targetAttribute) { var hasAttribute = false; var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; if (controllerActionDescriptor != null) { hasAttribute = controllerActionDescriptor .MethodInfo .GetCustomAttributes(targetAttribute, false).Any(); } return hasAttribute; } 

OK, a partir de Asp.Net Core 2.1. Con el fin de redirigir al usuario a la página de inicio de sesión. esto es lo que debe hacer en el método ConfigureServices(IserviceCollection services) .

 services.ConfigureApplicationCookie(options => { options.LoginPath = "/Identity/Account/Login"; options.SlidingExpiration = true; }); 

Para más información visite la documentación de identidad de Microsoft. https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-configuration?view=aspnetcore-2.1#cookie-settings