Estou trabalhando para atualizar meu aplicativo .NET Core 2.2 MVC para 3.0. Nesta aplicação, estou me autenticando em um controlador usando um token JWT. O token contém várias declarações, mas quando tento acessá-las através User.Claims
da lista resultante, sempre está vazio.
No meu Startup.cs
eu tenho a configuração de autenticação da seguinte forma:
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"
};
});
}
}
No Core 2.2, consegui acessar minhas reivindicações usando um código semelhante ao seguinte:
[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 //
}
}
No entanto, quando migro o mesmo código para o Core 3.0, faço a autenticação corretamente, mas não recebo reivindicações para o User
objeto.
Perdi um passo na conversão para 3.0? Não User
é mais preenchido automaticamente com informações ou algo assim?
UseEndpoints
para o final do Configure
método e isso consertou as coisas. Vaca sagrada, eu não posso acreditar que algo tão simples assim tenha me custado uma quantidade embaraçosa de tempo. Se você quiser postar isso como resposta, eu aceito.
User.Identity.IsAuthenticated
parece falso. Nesse caso, isso pode ter a ver com o AuthenticationScheme.