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>();
Так может стоит задуматься, а правильно ли Вы реализовали свою игру? Усвоили ли материал должным образом?Это логичное замечание, но предмет подразумевал выбор темы из списка предоставленных, а тема, которую я выбрал подразумевала именно такую реализацию. Просто шаблоны для документов стандартные и я сейчас думаю, как наименее болезненно описать свой проект стандартным шаблоном
function onDragMove(event) {
if (dragTarget) {
dragTarget.parent.toLocal(event.global, null, dragTarget.position);
}
}