string token = HttpContext.Request.Headers["Authorization"].FirstOrDefault()?.Replace("Bearer ", "");
Токен в лог выводится, а вот username, которое я добавлял в Claim, а claims в токен при генерации, равно nullList<Claim> claims = new() {
new Claim(ClaimTypes.Name, username)
};
То есть получается программа не может из токена вытащить даже username, но я не могу понять почемуbuilder.Services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,
ValidIssuer = AuthOptions.ISSUER,
ValidateAudience = true,
ValidAudience = AuthOptions.AUDIENCE,
ValidateLifetime = true,
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
ValidateIssuerSigningKey = true,
};
});
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,
ValidIssuer = AuthOptions.ISSUER,
ValidateAudience = true,
ValidAudience = AuthOptions.AUDIENCE,
ValidateLifetime = true,
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
ValidateIssuerSigningKey = true,
};
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
});
public string GenerateAccessToken(string username) {
List<Claim> claims = new() {
new Claim(ClaimTypes.Name, username)
};
SymmetricSecurityKey key = new(Encoding.UTF8.GetBytes(AuthOptions.SECRETKEY));
SigningCredentials creds = new(key, SecurityAlgorithms.HmacSha256);
JwtSecurityToken token = new(
issuer: AuthOptions.ISSUER,
audience: AuthOptions.AUDIENCE,
claims: claims,
expires: DateTime.UtcNow.AddMinutes(AuthOptions.ACCESSTOKENLIFETIME),
signingCredentials: creds
);
return new JwtSecurityTokenHandler().WriteToken(token);
}
private readonly ITokenService _tokenService;
public AuthController(ILogger<AuthController> logger, UserContext dbContext, ITokenService tokenService) {
_logger = logger;
_dbContext = dbContext;
_tokenService = tokenService;
}
builder.Services.AddScoped<ITokenService, TokenService>();
Так может стоит задуматься, а правильно ли Вы реализовали свою игру? Усвоили ли материал должным образом?Это логичное замечание, но предмет подразумевал выбор темы из списка предоставленных, а тема, которую я выбрал подразумевала именно такую реализацию. Просто шаблоны для документов стандартные и я сейчас думаю, как наименее болезненно описать свой проект стандартным шаблоном