i get always null as User in any controller
var usr = User as ClaimsPrincipal;
i've configired my app in this way:
var builder = WebApplication.CreateBuilder(args);
ConfigurationManager configuration = builder.Configuration;
builder.Services.AddDbContext<CustomIdentityDbContext>(options =>
{
options.UseSqlServer(configuration.GetConnectionString("SqlServerConnection")).EnableSensitiveDataLogging();
}
);
//config my custom identity
builder.Services.AddIdentity<WSA_UTENTE, WSA_RUOLI>(options =>
{
options.SignIn.RequireConfirmedAccount = true;
})
.AddEntityFrameworkStores<CustomIdentityDbContext>()
.AddDefaultTokenProviders();
//add jwt autentication middleware
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
then i'm able to generate a token
private JwtSecurityToken GetToken(IEnumerable<Claim> authClaims)
{
var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:ValidIssuer"],
audience: _configuration["Jwt:ValidAudience"],
expires: DateTime.Now.AddMinutes(String.IsNullOrEmpty(_configuration["Jwt:AccessTokenLifetime"]) ? int.Parse(_configuration["Jwt:AccessTokenLifetime"]) : 525600),
claims: authClaims,
signingCredentials: new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256)
);
return token;
}
between the prominent claims:
"sub: 8001ac54-12c0-4d18-f5a7-08db0445001d"
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: myusername"
whenever i call any controller var usr = User as ClaimsPrincipal;
is always null
do i need to do something like HttpContext.SignInAsync
to populate the HttpContext.User
or the jwt middleware do all the dirty job automatically?