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í?
UseEndpoints
al final del Configure
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é.
User.Identity.IsAuthenticated
parece falso. Si es así, entonces esto puede tener que ver con AuthenticationScheme.