Estoy trabajando para actualizar mi aplicación .NET Core 2.2 MVC a 3.0. En esta aplicación, me autentico en un controlador utilizando un token JWT. El token contiene varios reclamos, pero cuando intento acceder a ellos a través de User.Claims
la lista resultante siempre está vacío.
En mi Startup.cs
tengo la configuración de autenticación de esta manera:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Code removed for clarity //
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = JwtManager.Issuer,
ValidAudience = "MyAudience",
IssuerSigningKey = "MySigningKey"
};
});
}
}
En Core 2.2 pude acceder a mis reclamos usando un código similar al siguiente:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : Controller
{
[HttpGet("MyController/Action")]
public ActionResult<Aggregate[]> GetAction()
{
var username = User.FindFirstValue("MyUsernameClaim");
if (username == null)
{
return Forbid();
}
// Do Stuff //
}
}
Sin embargo, cuando migro el mismo código a Core 3.0, me autentico correctamente, pero no recibo ningún reclamo por el User
objeto.
¿Me perdí un paso al convertir esto a 3.0? ¿ User
Ya no se rellena automáticamente con información o algo así?
c#
asp.net-mvc
.net-core
Chris Stillwell
fuente
fuente
User.Identity.IsAuthenticated
parece falso. Si es así, entonces esto puede tener que ver con AuthenticationScheme.UseEndpoints
al final delConfigure
método y eso solucionó las cosas. Santa vaca, no puedo creer que algo tan simple como eso me haya costado una cantidad de tiempo embarazosa. Si quieres publicar eso como respuesta, lo aceptaré.Respuestas:
Parece que el usuario no está autenticado en absoluto.
Con asp.net core 3.0, el enrutamiento ha cambiado a enrutamiento de Endpoint. Puede optar por salir configurando
EnableEndpointRouting = false
.Pero ese no parece ser el caso aquí. Eso significa que tendrá que incluir ciertos servicios cuando los use, como autenticación y autorización:
Y lo más importante, en ese orden . Como se documenta aquí: Migrate Startup.Configure .
fuente