web-dev-qa-db-fra.com

Rediriger vers la connexion lorsque non autorisé dans ASP.NET Core

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:

  1. créé un projet ASP.NET Core à partir du modèle Visual Studio
  2. ajoutée [Authorize] à une action arbitraire
  3. ouvert la vue correspondante dans mon navigateur

Je 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?

16
grokky

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...
        },
});
3
Anuraj

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 .

11
animalito maquina

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

4
Anton Toshik

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");
        });
1
Serj Sagan