fix(api-keys): Fehlversuche je Client-Netz zählen (IPv6 /64)

Wie der Throttler seit 886b4e7: die Sperre nach abgelehnten Schlüsseln
zählt über rateLimitSubject, damit wechselnde Adressen im eigenen
IPv6-/64 das Budget nicht zurücksetzen. Im Log steht weiter die Adresse.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-12 11:47:05 +02:00
1 parent e357e8be9a
commit e28cc8e0f3
4 files changed
+24 -5

No files matched your search

@@ -159,6 +159,21 @@ describe('ApiKeysService.authenticate', () => {
scopes: ['erp-inventory:read'],
});
});
it('zählt IPv6-Adressen aus demselben /64 gemeinsam (wie der Throttler)', async () => {
// Wechselnde Adressen im eigenen /64 umgehen die Sperre nicht.
for (let i = 1; i <= API_KEY_FAILURE_LIMIT.maxFailures; i++) {
await service.authenticate(TOKEN, `2001:db8:1:2::${i.toString(16)}`);
}
await expect(
service.authenticate(TOKEN, '2001:db8:1:2::ffff'),
).rejects.toMatchObject({ status: 429 });
// Ein anderes /64 ist frei.
prisma.apiKey.findUnique.mockResolvedValueOnce(storedKey());
await expect(
service.authenticate(TOKEN, '2001:db8:1:3::1'),
).resolves.toMatchObject({ id: 'key-1' });
});
});
describe('extractApiKeyToken', () => {