Мы используем .net 8. Это было небольшое незначительное обновление.
С тех пор, как мы сделали это обновление, мы больше не можем вручную проверять токены jwt. .
Обычный процесс по-прежнему работает, когда мы предоставляем токен jwt в качестве заголовка и позволяет системе функционировать в обычном режиме.
У нас происходит несколько внешних вызовов, которые требуют токен jwt, который будет передан в качестве параметра запроса.
Я могу взять токен и вставить его в jwt.io или jwt.ms, и я вижу, что срок действия установлен на 7 дней с этого момента.
Но если я попытаюсь проверить токен вручную с помощью JwtSecurityTokenHandler.ValidateToken, мы получим следующую ошибку:
Microsoft.IdentityModel.Tokens.SecurityTokenNoExpirationException: 'IDX10225: проверка срока службы не удалась. У токена не указан срок действия. Тип токена: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'.'
Если я читаю токен с помощью JwtSecurityTokenHandler.ReadJwtToken, я могу получить доступ ко всему в токене, но для свойства ValidTo установлено значение 0001-01-01.
Это метод, который мы используем для создания токена:
Код: Выделить всё
private string CreateJwtToken(List claims)
{
var eCDsa = LoadPrivateKey(_tokenProviderConfiguration.EcdPrivateKey);
var securityTokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Issuer = _tokenProviderConfiguration.IssuerFormat,
Audience = _tokenProviderConfiguration.AudiencesFormat,
Expires = DateTime.UtcNow.AddMinutes(Convert.ToInt32(_tokenProviderConfiguration.ExpirationMinutes)),
SigningCredentials = new SigningCredentials(new ECDsaSecurityKey(eCDsa), SecurityAlgorithms.EcdsaSha512),
IssuedAt = DateTime.UtcNow
};
var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
var securityToken = jwtSecurityTokenHandler.CreateToken(securityTokenDescriptor);
return jwtSecurityTokenHandler.WriteToken(securityToken);
}
Код: Выделить всё
public bool IsTokenValid(string token)
{
if (string.IsNullOrEmpty(token))
throw new ArgumentException("Provided token is null or empty.");
var tokenValidationParameters = GetTokenValidationParameters();
JwtSecurityTokenHandler jwtSecurityTokenHandler = new();
try
{
ClaimsPrincipal tokenValid = jwtSecurityTokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken validatedToken);
return validatedToken != null && validatedToken.ValidTo > DateTime.UtcNow;
}
catch (Exception)
{
return false;
}
}
public TokenValidationParameters GetTokenValidationParameters()
{
var eCDsa = LoadPublicKey(_tokenProviderConfiguration.EcdPublicKey);
return new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = false,
ValidIssuer = _tokenProviderConfiguration.IssuerFormat,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new ECDsaSecurityKey(eCDsa),
ClockSkew = TimeSpan.FromSeconds(5)
};
}
Код: Выделить всё
eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MzBjZjZiOC02ZDU4LTRhODQtOTVhNy0yZmRmZjgyOGEyMTEiLCJhdWQiOlsiaHR0cDovLyoubG9jYWxob3N0OjQyMDAiLCJodHRwOi8vKi5sb2NhbGhvc3Q6NDIwMCJdLCJpc3MiOiJodHRwczovL2FwaS5sb2NhbGhvc3QiLCJuYmYiOjE3MTk4MjM2ODMsImV4cCI6MTcyMDQyODQ4MywiaWF0IjoxNzE5ODIzNjgzfQ.AB4rmG-j61DoGC49K-8ZYLbU6sHcwIxI7Vwh2Zp5w4v15X6p9Y2AhQXmGB7BAGVbVW4rWlGAHPzjMzBW6PDCDQTrAa8V1y0X1fAHRpXRsoKtS4cfnSEpRVQnVYj96SKn-UcGVqtZ2AOzGrsPG4Nwz-HXnN2Sdi5bTUUoDaSPn8ZdCyJe
Сейчас это вызывает у нас огромную головную боль, поскольку клиенты не могут загрузить свои заказы.
p>
Заранее спасибо
Я попробовал удалить все лишние данные, которые мы обычно добавляем, но проблема все еще сохраняется.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ration-tim