fix reused token within grace still throwing
All checks were successful
CI / Maven unit tests (push) Successful in 15s
CI / Build and push images (push) Has been skipped
CI / Deploy to server (push) Has been skipped

This commit is contained in:
2026-10-07 18:45:27 +01:00
parent 40fc80537b
commit 8166c62bb1

View File

@@ -89,12 +89,9 @@ public class TokenService {
} }
// Reuse Check // Reuse Check
if (refreshToken.getUsedAt() != null) { if (refreshToken.getUsedAt() != null && now.isAfter(refreshToken.getUsedAt().plus(refreshGracePeriod))) {
if (now.isAfter(refreshToken.getUsedAt().plus(refreshGracePeriod))) { tokenFamily.setRevokedAt(now);
tokenFamily.setRevokedAt(Instant.now()); tokenFamilyRepository.save(tokenFamily);
tokenFamilyRepository.save(tokenFamily);
}
throw new NotAuthenticated("Refresh token already being used"); throw new NotAuthenticated("Refresh token already being used");
} }
@@ -106,9 +103,11 @@ public class TokenService {
throw new NotAuthenticated("Refresh token or family expired"); throw new NotAuthenticated("Refresh token or family expired");
} }
// Rotate // Invalidate old token, unless we're within the grace period, otherwise the grace gets extended
refreshToken.setUsedAt(now); if (refreshToken.getUsedAt() == null) {
refreshTokenRepository.save(refreshToken); refreshToken.setUsedAt(now);
refreshTokenRepository.save(refreshToken);
}
byte[] newRawToken = generateRandomBytes(32); byte[] newRawToken = generateRandomBytes(32);
createRefreshToken( createRefreshToken(