ASP.NET Core 7 Identity + JWT Authentication работает неправильно ⇐ C#
ASP.NET Core 7 Identity + JWT Authentication работает неправильно
Найдите решение!
Установите для ClockSkew значение TimeSpan.Zero
Я хочу использовать платформу ASP.NET Core Identity и аутентификацию с JWT.
Я внедрил идентификационные данные:
builder.Services.AddIdentity(options => { options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; options.Password.RequireDigit = false; options.Password.RequiredUniqueChars = 1; options.Password.RequiredLength = 8; options.Lockout.AllowedForNewUsers = true; options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"; }) .AddEntityFrameworkStores(); И промежуточное ПО JWT:
builder.Services .AddAuthentication(опции => { options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, config => { вар _configuration = builder.Configuration; JwtSettings jwtSettings = _configuration.GetSection("Auth").Get()!.Jwt; // Мы уже проверяем ноль вар secretKey = jwtSettings.Key; config.TokenValidationParameters = новые TokenValidationParameters() { ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Audience, Валидатаудиенс = правда, ValidateIssuer = правда, ValidateLifetime = правда, ValidateIssuerSigningKey = true, IssuerSigningKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)), ClockSkew = TimeSpan.Zero // так как по умолчанию токен действителен 5 минут, // вам необходимо вручную настроить эти свойства, // поэтому вы можете сделать токен действительным менее 5 минут }; }); У контроллера есть метод Login с атрибутом [Authorize]:
[Авторизовать()] [HttpGet()] публичный секрет IActionResult() { вернуть ОК(); } Токен генерации
публичная строка GenerateAccessToken (IEnumerable утверждения) { вар jwtSettings = _authSettings.Jwt; вар secretKey = jwtSettings.Key; var SecurityKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); вар SigningCredentials = новые SigningCredentials (securityKey, SecurityAlgorithms.HmacSha256); вар токен = новый JwtSecurityToken( jwtSettings.Issuer, jwtSettings.Аудитория, претензии, истекает: DateTime.Now.ToUniversalTime(),, SigningCredentials: подписываниеCredentials ); вернуть новый JwtSecurityTokenHandler().WriteToken(токен); } Но когда я отправляю запрос с токеном, срок действия которого истек, он проверяется. В TokenService я генерирую JWT со сроком действия «сейчас».
Я использую UserManager и SignInManager для авторизации пользователя.
В чем проблема?
Я уже пробовал изменить порядок реализации Identity и JWT.
Найдите решение!
Установите для ClockSkew значение TimeSpan.Zero
Я хочу использовать платформу ASP.NET Core Identity и аутентификацию с JWT.
Я внедрил идентификационные данные:
builder.Services.AddIdentity(options => { options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; options.Password.RequireDigit = false; options.Password.RequiredUniqueChars = 1; options.Password.RequiredLength = 8; options.Lockout.AllowedForNewUsers = true; options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"; }) .AddEntityFrameworkStores(); И промежуточное ПО JWT:
builder.Services .AddAuthentication(опции => { options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, config => { вар _configuration = builder.Configuration; JwtSettings jwtSettings = _configuration.GetSection("Auth").Get()!.Jwt; // Мы уже проверяем ноль вар secretKey = jwtSettings.Key; config.TokenValidationParameters = новые TokenValidationParameters() { ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Audience, Валидатаудиенс = правда, ValidateIssuer = правда, ValidateLifetime = правда, ValidateIssuerSigningKey = true, IssuerSigningKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)), ClockSkew = TimeSpan.Zero // так как по умолчанию токен действителен 5 минут, // вам необходимо вручную настроить эти свойства, // поэтому вы можете сделать токен действительным менее 5 минут }; }); У контроллера есть метод Login с атрибутом [Authorize]:
[Авторизовать()] [HttpGet()] публичный секрет IActionResult() { вернуть ОК(); } Токен генерации
публичная строка GenerateAccessToken (IEnumerable утверждения) { вар jwtSettings = _authSettings.Jwt; вар secretKey = jwtSettings.Key; var SecurityKey = новый SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); вар SigningCredentials = новые SigningCredentials (securityKey, SecurityAlgorithms.HmacSha256); вар токен = новый JwtSecurityToken( jwtSettings.Issuer, jwtSettings.Аудитория, претензии, истекает: DateTime.Now.ToUniversalTime(),, SigningCredentials: подписываниеCredentials ); вернуть новый JwtSecurityTokenHandler().WriteToken(токен); } Но когда я отправляю запрос с токеном, срок действия которого истек, он проверяется. В TokenService я генерирую JWT со сроком действия «сейчас».
Я использую UserManager и SignInManager для авторизации пользователя.
В чем проблема?
Я уже пробовал изменить порядок реализации Identity и JWT.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение