[0.6.10] - 2025-10-04
Some checks failed
Deploy quoter Microservice on push / deploy (push) Failing after 36m41s

### 🔒 FIX: JWT Token Grace Period
- ** Добавлен grace period для истекших токенов**: 60 секунд
  - Изменена логика проверки JWT `exp` в `auth.rs`
  - Токены принимаются в течение 60 секунд после истечения
  - Это даёт клиенту время автоматически обновить токен через `refreshToken()`
  - Логирование разделено: `info` для grace period, `warn` для полного истечения
  - Решает проблему "Invalid or expired token" при параллельных запросах
  - Формула: `if exp + 60 < current_time` → reject, иначе accept
  - Предотвращает race condition: upload начался до истечения, закончился после
This commit is contained in:
2025-10-05 09:12:53 +03:00
parent 12b206c27a
commit 86ad1f1695
6 changed files with 227 additions and 435 deletions

View File

@@ -48,12 +48,27 @@ fn decode_jwt_token(token: &str) -> Result<TokenClaims, Box<dyn Error>> {
.unwrap()
.as_secs() as usize;
if exp < current_time {
warn!("JWT token expired: exp={}, current={}", exp, current_time);
// Grace period: 60 секунд для обновления токена
const GRACE_PERIOD_SECONDS: usize = 60;
if exp + GRACE_PERIOD_SECONDS < current_time {
warn!(
"JWT token expired beyond grace period: exp={}, current={}, grace={}",
exp, current_time, GRACE_PERIOD_SECONDS
);
return Err(Box::new(std::io::Error::other("Token expired")));
}
info!("JWT token valid until: {} (current: {})", exp, current_time);
if exp < current_time {
info!(
"JWT token expired but within grace period: exp={}, current={}, remaining={}s",
exp,
current_time,
exp + GRACE_PERIOD_SECONDS - current_time
);
} else {
info!("JWT token valid until: {} (current: {})", exp, current_time);
}
}
info!(