Используя DotNet Core 2.2, я использую аутентификацию JWT в своем приложении, сохраняя токен в куки.Все хорошо, кроме того, когда токен истекает.
У меня есть следующие опции для моей аутентификации в Startup.cs:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.SlidingExpiration = true;
options.Cookie.Name = "access_token";
options.TicketDataFormat = new SimpleTokenProvider.CustomJwtDataFormat(
SecurityAlgorithms.HmacSha256,
tokenValidationParameters);
options.Cookie.SameSite = SameSiteMode.None;
});
А вот мой SimpleTokenProvider.cs
файл:
public AuthenticationTicket Unprotect(string protectedText, string purpose)
{
var handler = new JwtSecurityTokenHandler();
ClaimsPrincipal principal = null;
SecurityToken validToken = null;
try
{
principal = handler.ValidateToken(protectedText, this.validationParameters, out validToken);
var validJwt = validToken as JwtSecurityToken;
if (validJwt == null)
{
throw new ArgumentException("Invalid JWT");
}
if (!validJwt.Header.Alg.Equals(algorithm, StringComparison.Ordinal))
{
throw new ArgumentException($"Algorithm must be '{algorithm}'");
}
}
catch (SecurityTokenValidationException e)
{
return null;
}
catch (ArgumentException e)
{
return null;
}
return new AuthenticationTicket(principal, new AuthenticationProperties(), "Cookie");
}
Моя проблема заключается встрока handler.ValidateToken(protectedText, this.validationParameters, out validToken)
продолжает выдавать исключение тайм-аута:
Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: 'IDX10223: проверка продолжительности жизни не выполнена.Срок действия токена истек.ValidTo: '[PII скрыт]', Текущее время: '[PII скрыт]'. '
В этом случае я хотел бы автоматически сгенерировать новый токен или удалитьтекущий файл cookie для аутентификации.
Как мне это сделать / как лучше всего поступить?