Dhal kann nach IP, Route, Benutzer, Tenant oder API-Schlüssel limitieren. Das ist für authentifizierte APIs und Multi-Tenant-Systeme zuverlässiger als reine IP-Limits.
{
"rateLimit": {
"enabled": true,
"store": "memory",
"keyBy": ["ip", "route"],
"default": { "windowSeconds": 60, "max": 120 },
"routes": {
"/api/search": { "windowSeconds": 60, "max": 30 }
}
}
}Verfügbare Komponenten: ip, route, userId, tenantId und apiKeyId. Credential Stuffing unterstützt zusätzlich userAgent.
| Anwendungsfall | Empfohlener Schlüssel |
|---|---|
| Öffentlicher Endpoint | ip, route |
| Authentifizierte Aktion | userId, route |
| Tenant-Quota | tenantId, route |
| API-Integration | apiKeyId, route |
| Login | ip, route, optional userAgent |
Identitäts-Header
{
"identity": {
"headers": {
"userId": ["x-dhal-user-id", "x-user-id"],
"tenantId": ["x-dhal-tenant-id", "x-tenant-id"],
"apiKeyId": ["x-dhal-api-key-id", "x-api-key-id"]
}
}
}Vertrauen Sie nur Headern, die von Authentifizierung oder Gateway entfernt und neu gesetzt werden. Akzeptieren Sie keine unveränderten öffentlichen Client-Identitäten.
Routenprofil
{
"routes": {
"/api/export": {
"mode": "block",
"rateLimit": {
"enabled": true,
"windowSeconds": 3600,
"max": 10,
"keyBy": ["tenantId", "userId"]
}
}
}
}Der Memory Store eignet sich für Entwicklung, Tests und einen einzelnen Prozess. Für horizontale Produktion verwenden Sie RedisRateLimitStore oder einen atomaren gemeinsamen Store mit Ablaufzeiten.