28 votes

Aucun authenticationScheme n'a été spécifié, et aucun DefaultChallengeScheme n'a été trouvé Cookies Authentication

J'utilise le code ci-dessous pour l'authentification dans ASP.NET Core 2.0 en utilisant des cookies.

services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie("MyCookieMiddlewareInstance", options =>
    {
        options.AccessDeniedPath = new PathString("/Account/Login");
        options.LoginPath = new PathString("/Account/Login");
        options.LogoutPath = new PathString("/Account/LogOff");
    });

Je reçois une erreur :

Aucun authenticationScheme n'a été spécifié et aucun DefaultChallengeScheme n'a été trouvé.

La configuration des cookies est ci-dessous :

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, userId.ToString()),
    new Claim(ClaimTypes.Name, userName)
};

var identity = new ClaimsIdentity(claims, "Forms");
identity.AddClaim(new Claim(ClaimTypes.Role, "ADMIN"));
var principal = new ClaimsPrincipal(identity);
HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", principal, new AuthenticationProperties
{
    IsPersistent = isPersistent,
    ExpiresUtc = DateTime.UtcNow.AddYears(1)
});

J'ai fait quelques recherches et je n'ai pas trouvé la solution. Voici un lien vers le document J'ai utilisé :

Quelqu'un peut-il me dire comment résoudre ce problème ?

11voto

poke Points 64398
authenticationBuilder.AddCookie("MyCookieMiddlewareInstance", …)

Ceci enregistre un gestionnaire d'authentification de cookie en utilisant le nom du schéma d'authentification "MyCookieMiddlewareInstance" . Ainsi, chaque fois que vous faites référence au schéma d'authentification des cookies, vous devez utiliser ce nom exact, sinon vous ne trouverez pas le schéma.

Cependant, dans le AddAuthentication appel, vous utilisez un nom de schéma différent :

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)

Cela permet d'enregistrer le CookieAuthenticationDefaults.AuthenticationScheme qui a la valeur constante "Cookies" comme schéma d'authentification par défaut. Mais un schéma portant ce nom n'est jamais enregistré ! Au lieu de cela, il y a seulement un "MyCookieMiddlewareInstance" .

La solution est donc d'utiliser simplement le même nom pour les deux appels. Vous pouvez également utiliser les valeurs par défaut et supprimer les noms explicites ; si vous n'avez pas plusieurs schémas et que vous avez besoin de plus de contrôle, il n'est pas vraiment nécessaire de définir explicitement leurs noms.

4voto

Johnny Reilly Points 1270

Pour ceux qui atterrissent sur ce site et en ressortent frustrés, je leur conseille de jeter un coup d'œil à la réponse à cette question : intergiciel d'authentification ASP.NET Core 2.0

Sans trop répéter ce que vous y trouvez, il semble que ce problème soit lié aux changements de sécurité entre ASP.Net Core 1 et 2. En tout cas, les conseils donnés ici ont résolu mes propres problèmes. Il est également intéressant de jeter un coup d'œil à cet article de blog : https://ignas.me/tech/custom-authentication-asp-net-core-20/ (que je soupçonne d'avoir été écrite sur la base de cette réponse de l'OS)

0voto

YuriyP Points 1256

HttpContext.Authentication est obsolète dans ASP.net core 2.0, donc à la place HttpContext.Authentication.SignInAsync utiliser HttpContext.SignInAsync

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X