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?
c#
asp.net-mvc
.net-core
Chris Stillwell
fonte
fonte
User.Identity.IsAuthenticated
parece falso. Nesse caso, isso pode ter a ver com o AuthenticationScheme.UseEndpoints
para o final doConfigure
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.Respostas:
Parece que o usuário não está autenticado.
Com o asp.net core 3.0, o roteamento foi alterado para Endpoint. Você pode optar por excluir definindo
EnableEndpointRouting = false
.Mas esse não parece ser o caso aqui. Isso significa que você precisará incluir determinados serviços ao usá-los, como autenticação e autorização:
E o mais importante, nessa ordem . Conforme documentado aqui: Migrar Startup.Configure .
fonte