JWT IDX10225: проверка срока службы не выполнена. У токена не указан срок действия. TokenType: 'System.Identitymodel.tokC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 JWT IDX10225: проверка срока службы не выполнена. У токена не указан срок действия. TokenType: 'System.Identitymodel.tok

Сообщение Anonymous »

Недавно мы обновили все наши зависимости до последней версии.
Мы используем .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
Пример из Jwt.IO, показывающий дату истечения срока действия.
Сейчас это вызывает у нас огромную головную боль, поскольку клиенты не могут загрузить свои заказы.
p>
Заранее спасибо
Я попробовал удалить все лишние данные, которые мы обычно добавляем, но проблема все еще сохраняется.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ration-tim
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»