Dans le MVC ASP.NET précédent, il y avait une option pour rediriger vers l'action de connexion, si l'utilisateur n'était pas authentifié.
J'ai besoin de la même chose avec ASP.NET Core, donc je:
[Authorize]
à une action arbitraireJe ne m'attends pas à une redirection car je ne l'ai pas configurée. MAIS, il redirige automatiquement vers l'action de connexion!
Où/comment cette option est-elle définie?
Vous pouvez configurer le chemin à l'aide de la classe CookieAuthenticationOptions
.
Quelque chose comme ça.
app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
AuthenticationType = "My-Magical-Authentication",
// etc...
},
});
Avec la version actuelle du noyau aspnet (2.1.0), cela a changé, maintenant, vous pouvez utiliser les extensions:
services.ConfigureApplicationCookie(options => options.LoginPath = "/login");
ou
services
.AddAuthentication()
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/logout";
});
Vous pouvez en savoir plus sur la migration vers 2.0 dans cet article .
Pour toute personne intéressée, cela peut également être fait avec le fournisseur de services AddIdentity.
services.AddIdentity<User, IdentityRole>(options =>
{
options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
options.Cookies.ApplicationCookie.AutomaticChallenge = true;
options.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
})
.AddEntityFrameworkStores<MehandiContext>()
.AddDefaultTokenProviders();
Et comme expliqué ici: https://stackoverflow.com/a/41643105/5784635
J'ai tenté cela en avril 2017 et "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0"
ne redirige pas j'ai dû utiliser le 1.0.1
version
La redirection ne fonctionnait pas du tout dans mon application et aucune des solutions ici ne l'a corrigée, mais en utilisant Status Code Pages
fait:
app.UseStatusCodePages(async context =>
{
var response = context.HttpContext.Response;
if (response.StatusCode == (int)HttpStatusCode.Unauthorized ||
response.StatusCode == (int)HttpStatusCode.Forbidden)
response.Redirect("/Authentication");
});