JwtSecurityToken не истекает, когда это должно
В настоящее время я использую класс JwtSecurityToken в пространстве имен System.IdentityModels.Tokens. Я создаю токен, используя следующее:
DateTime expires = DateTime.UtcNow.AddSeconds(10);
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
var genericIdentity = new System.Security.Principal.GenericIdentity(username, "TokenAuth");
ClaimsIdentity identity = new ClaimsIdentity(claims);
string secret = ConfigurationManager.AppSettings["jwtSecret"].ToString();
var securityKey = new InMemorySymmetricSecurityKey(Encoding.Default.GetBytes(secret));
var signingCreds = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.HmacSha256Signature);
var securityToken = handler.CreateToken(
issuer: issuer,
audience: ConfigurationManager.AppSettings["UiUrl"].ToString(),
signingCredentials: signingCreds,
subject: identity,
expires: expires,
notBefore: DateTime.UtcNow
);
return handler.WriteToken(securityToken);
По какой-то причине, хотя срок действия истекает через 10 секунд после текущего времени, он фактически не выдает исключение, когда токен проверяется примерно до 5 минут. Увидев это, я подумал, что, возможно, было минимальное время истечения 5 минут, поэтому я установил время истечения на:
DateTime.UtcNow.AddMinutes(5);
Затем он истекает через 10 минут, но в сообщении об исключении говорится, что время истечения установлено равным предполагаемому (5 минут после входа пользователя в систему), а когда отображается текущее время в исключении, то через 5 минут время истечения. Таким образом, кажется, что он знает, когда он ДОЛЖЕН истечь, но на самом деле он выдает исключение только через 5 минут после истечения времени. Затем, так как токен, кажется, добавляет 5 минут к тому времени, когда я установил срок его действия, я установил время истечения на:
DateTime.UtcNow.AddMinutes(-5).AddSecond(10);
Я проверил это, и до сих пор оно еще не истекло (после более чем десяти минут). Может кто-нибудь объяснить, почему это происходит и что я делаю не так? Кроме того, если вы увидите что-то еще с кодом, который я предоставил, любые рекомендации будут полезны, так как я новичок в использовании JWT и этой библиотеки.
заранее спасибо