c# - asp - No se especificó authenticationScheme, y no se encontró DefaultChallengeScheme.
asp.net core authentication (3)
Para aquellos que aterrizan en esto y se sienten frustrados, mi consejo es que echen un vistazo a la respuesta a esta pregunta: ASP.NET Core 2.0 middleware de autenticación.
Sin volver a iterar lo que encuentra allí, parece que este problema está relacionado con los cambios en la seguridad entre ASP.Net Core 1 y 2. Ciertamente, el consejo allí resolvió mis propios problemas. También vale la pena echar un vistazo a esta publicación del blog: https://ignas.me/tech/custom-authentication-asp-net-core-20/ (que sospecho que se escribió en base a esa respuesta de SO)
Estoy utilizando el siguiente código para la autenticación en ASP.NET Core 2.0 mediante 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");
});
Estoy recibiendo un error:
No se especificó authenticationScheme, y no se encontró DefaultChallengeScheme
La configuración de las cookies se encuentra a continuación:
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)
});
Hice una investigación y no encontré la solución. Aquí hay un enlace al documento que utilicé:
¿Puede alguien, por favor, decirme cómo puedo resolver este problema?
HttpContext.Authentication
está obsoleta en ASP.net core 2.0, así que en su lugar HttpContext.Authentication.SignInAsync
usa HttpContext.SignInAsync
authenticationBuilder.AddCookie("MyCookieMiddlewareInstance", …)
Esto registra un controlador de autenticación de cookies que utiliza el nombre de esquema de autenticación "MyCookieMiddlewareInstance"
. Por lo tanto, cuando se refiera al esquema de autenticación de cookies, deberá usar ese nombre exacto, de lo contrario no encontrará el esquema.
Sin embargo, en la llamada AddAuthentication
, está utilizando un nombre de esquema diferente:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
Esto registra el CookieAuthenticationDefaults.AuthenticationScheme
, que tiene el valor constante "Cookies"
, como el esquema de autenticación predeterminado. ¡Pero un esquema con ese nombre nunca se registra! En su lugar, solo hay una "MyCookieMiddlewareInstance"
.
Así que la solución es simplemente usar el mismo nombre para ambas llamadas. También puede usar los valores predeterminados y eliminar los nombres explícitos; Si no tiene múltiples esquemas y necesita más control, realmente no hay necesidad de establecer explícitamente sus nombres.