Normalement (sur mon hôte local par exemple), [Authorize]
redirige correctement vers LoginPath
spécifié dans les CookieAuthenticationOptions
.
Cependant, lorsque je déploie sur mon site de développement ( staging.mysite.com
), la redirection d'autorisation semble égarer une partie de l'url.
Dans mon cas, il va:
http: //staging/Account.mysite.com/Login? ReturnUrl =% 2FHome% 2FAuthorize
quand il devrait aller à:
http://staging.mysite.com/Account/Login?ReturnUrl=%2FHome%2FAuthorize
L'application est très basique:
options.LoginPath = "/Login"; //I removed /Account [HttpGet("/Login")] //I added the "/Login" template public IActionResult Login()
Mes contrôleurs:
//HomeController.cs [Route("[controller]/[action]")] public class HomeController : Controller { [Authorize] public IActionResult Authorize() { return Ok("You are authorized"); } } //AccountController.cs [Route("[controller]/[action]")] public class AccountController : Controller { public IActionResult Login() { return View(new LoginViewModel()); } }
Quelqu'un voit où je vais mal?
Étrangement, si je fais les changements ci-dessous, cela fonctionne. Il semble donc que le problème soit lié à la spécification de l'action dans l'itinéraire?
//Startup.cs services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Account/Login"; options.LogoutPath = "/Account/Logout"; options.AccessDeniedPath = "/Home/Unauthorized"; options.ReturnUrlParameter = "ReturnUrl"; }); services.AddMvc() //.... app.UseMvc();
3 Réponses :
essayez ceci
options.Events = new CookieAuthenticationEvents() { OnRedirectToLogin = (context) => { context.HttpContext.Response.Redirect("http://staging.mysite.com/Account/Login?ReturnUrl=%2FHome%2FAuthorize"); return Task.CompletedTask; } };
Modifier supprimez-le
options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
et ajoutez-le
options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
cela devrait fonctionner, mais je ne veux pas avoir à le faire. Je vais vous donner un vote positif!
Avez-vous défini l'itinéraire comme celui-ci?
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } );
Sinon, ajoutez-le dans RouteConfig.cs. Ou vous pouvez définir l'itinéraire directement avec [Route ("route")].
J'ai trouvé le problème.
Le problème n'était pas avec asp.net core ou mon application.
Le problème était lié à une regex de redirection que nous utilisions dans IIS.