web-dev-qa-db-fra.com

AuthenticationScheme n'a pas été spécifié et aucun DefaultChallengeScheme n'a été trouvé. Authentification des cookies

J'utilise le code ci-dessous pour l'authentification dans ASP.NET Core 2.0 à l'aide de 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:

AuthenticationScheme n'a pas é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 des recherches et je n'ai pas trouvé la solution. Voici n lien vers la doc j'ai utilisé:

Quelqu'un peut-il s'il vous plaît laissez-moi savoir comment puis-je résoudre ce problème?

28
San Jaisy
authenticationBuilder.AddCookie("MyCookieMiddlewareInstance", …)

Ceci enregistre un gestionnaire d'authentification par cookie en utilisant le nom du schéma d'authentification "MyCookieMiddlewareInstance". Ainsi, chaque fois que vous vous référez au schéma d'authentification par cookie, vous devrez utiliser ce nom exact, sinon vous ne le trouverez pas.

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

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)

Ceci enregistre le CookieAuthenticationDefaults.AuthenticationScheme, qui a la valeur constante "Cookies", en tant que schéma d'authentification par défaut. Mais un schéma avec ce nom n'est jamais enregistré! Au lieu de cela, il n’ya qu’un "MyCookieMiddlewareInstance".

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

11
poke

Pour ceux qui atterrissent dessus et qui s'en vont frustrés, mon conseil est de jeter un coup d'œil à la réponse à cette question: middleware d'authentification ASP.NET Core 2.

Sans trop réitérer 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. Certes, les conseils fournis ici ont résolu mes propres problèmes. Cela vaut également la peine de jeter un coup d'œil à cet article de blog: https://ignas.me/tech/custom-authentication-asp-net-core-20/ (dont je soupçonne qu'il a été écrit sur cette base = SO réponse)

4
John Reilly

HttpContext.Authentication est obsolète dans ASP.net core 2.0, donc HttpContext.Authentication.SignInAsync utilisation HttpContext.SignInAsync

0
YuriyP