[0.6.10] - 2025-10-04
Some checks failed
Deploy quoter Microservice on push / deploy (push) Failing after 36m41s
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:
21
src/auth.rs
21
src/auth.rs
@@ -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!(
|
||||
|
||||
Reference in New Issue
Block a user