web-dev-qa-db-fra.com

ASP.NET Core 2.0 Preview 1: Comment configurer l'authentification par cookie avec un chemin de connexion personnalisé

Dans ASP.NET Core 2.0, le middleware .UseAuthentication () a un changement de rupture qui ne permet plus à la ancienne syntaxe mentionnée ici de fonctionner.

La nouvelle version semble gérer la configuration dans addAuthentication, mais je ne trouve aucun détail sur la façon de modifier mon ancien code qui spécifiait une URL de connexion et de déconnexion personnalisée.

        services.AddAuthentication(o =>
        {
            // Where can I specify this?????
            var opt = new CookieAuthenticationOptions()
            {
                LoginPath = "/api/login",
                LogoutPath = "/api/logout",
            };

           o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
           o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        });

Toute aide serait appréciée...

11
Rick Strahl

Mis à jour car cela a de nouveau légèrement changé dans les bits 2.0 RTM

Il s'avère que c'est beaucoup plus facile que prévu, mais comme la documentation officielle n'a pas encore été mis à jour, voici exactement ce qui fonctionne pour l'authentification par cookie ordinaire:

Configuration:

Dans ConfigureServices() configurez le mécanisme d'authentification spécifique:

services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o =>
    {
        o.LoginPath = "/api/login";
        o.LogoutPath = "/api/logout";
        // additional config options here
    });

Puis dans Configure() pour connecter réellement le middleware:

app.UseAuthentication();

Utilisation des composants d'authentification

Ensuite, pour utiliser les composants Auth réels, la logique est passée de l'objet HttpContext.Authentication À seulement HttpContext dans la logique d'application comme le code du contrôleur:

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
            new ClaimsPrincipal(identity));

ou:

await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
13
Rick Strahl

L'exemple que vous avez publié ne semble de toute façon pas être un vrai code (c'est-à-dire que new CookieAuthenticationOptions() se trouve dans l'appel AddAuthentication, plutôt que comme argument à AddCookieAuthentication). Vous n'ajoutez pas d'autorisations à l'intérieur de l'appel AddAuthorization, vous configurez simplement les middlewares standards ici, voir cette annonce .

Vieux:

services.AddAuthentication(sharedOptions => 
       sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
   AutomaticChallenge = true,
   AutomaticAuthenticate = true,

Nouveau:

app.AddAuthentication(o => {
   o.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
   o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
   o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});

Et le

services.AddXxxAuthentication(new XxxOptions() { ... });

sont remplacés par

services.AddXxxAuthentication(options => {
});

être en ligne avec toutes les autres méthodes qui acceptent une configuration.

Il vaut également toujours la peine de jeter un coup d'œil au Référentiel GitHub des annonces ASP.NET Core , où l'équipe ASP.NET Core annonce des changements de rupture pour la prochaine version, sélectionnez simplement un jalon spécifique, c'est-à-dire 2.0 .0-preview1 , 2.0.0-preview2 , etc.

10
Tseng