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.