В настоящее время я использую класс 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 и этой библиотеки.
Заранее благодарю