fix: always fresh Vault login on each key rotation (was using expired startup token)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { env, getVaultToken } from '../config/env';
|
||||
import { env } from '../config/env';
|
||||
import { vaultAppRoleLogin } from '../config/vault';
|
||||
import { fetchJwtKeysFromVault, swapKeyMap, getKeyMapSize } from './jwt.service';
|
||||
import { fetchCsrfConfig, swapCsrfConfig } from './csrf.service';
|
||||
@@ -33,17 +33,15 @@ async function doRefresh(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
|
||||
// Каждый refresh — свежий Vault token. Старый optimisation с `currentVaultToken`
|
||||
// был dead code (синхронный reset перед использованием).
|
||||
let token = getVaultToken();
|
||||
// КАЖДЫЙ refresh — свежий AppRole login. Vault token TTL обычно ≤1 час, а refresh-интервал
|
||||
// тоже ~1 час → кэшировать токен между tick'ами = expired token на 2-м tick → silent fail.
|
||||
// Стоимость fresh login: один HTTP-запрос в час — пренебрежимо. Безопасность: гарантированно
|
||||
// валидный токен для всех последующих fetches.
|
||||
const token = await vaultAppRoleLogin(addr, roleId, secretId);
|
||||
if (!token) {
|
||||
const fresh = await vaultAppRoleLogin(addr, roleId, secretId);
|
||||
if (!fresh) {
|
||||
logger.error('Key refresh: Vault AppRole login failed');
|
||||
return;
|
||||
}
|
||||
token = fresh;
|
||||
}
|
||||
|
||||
const jwtPromise = fetchJwtKeysFromVault(addr, token, mount, jwtKidPath, jwtKidsPrefix);
|
||||
const csrfPromise = csrfPath ? fetchCsrfConfig(addr, token, mount, csrfPath) : Promise.resolve(null);
|
||||
|
||||
Reference in New Issue
Block a user