WIP: feat(security): implement refresh tokens #49

Closed
dylan wants to merge 25 commits from feat/add-refresh-tokens into master
Showing only changes of commit 8166c62bb1 - Show all commits

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(