Rokad
Toda la documentación
Documentación de dhal

Límites e identidad

Construye claves de límite con IP, ruta, usuario, tenant y clave API.

Ver repositorio
Documentación de dhal
Página 5 de 9

Dhal puede limitar por IP, ruta, usuario, tenant o clave API. Esto evita depender únicamente de la IP en APIs autenticadas y sistemas multi-tenant.

json
{
  "rateLimit": {
    "enabled": true,
    "store": "memory",
    "keyBy": ["ip", "route"],
    "default": { "windowSeconds": 60, "max": 120 },
    "routes": {
      "/api/search": { "windowSeconds": 60, "max": 30 }
    }
  }
}

Los componentes disponibles son ip, route, userId, tenantId y apiKeyId. Credential stuffing también admite userAgent.

CasoClave sugerida
Endpoint públicoip, route
Acción autenticadauserId, route
Cuota de tenanttenantId, route
Integración APIapiKeyId, route
Loginip, route, opcionalmente userAgent

Cabeceras de identidad

json
{
  "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"]
    }
  }
}

Confía solo en cabeceras eliminadas y reescritas por tu autenticación o gateway. No aceptes identidades proporcionadas directamente por clientes públicos.

Perfil por ruta

json
{
  "routes": {
    "/api/export": {
      "mode": "block",
      "rateLimit": {
        "enabled": true,
        "windowSeconds": 3600,
        "max": 10,
        "keyBy": ["tenantId", "userId"]
      }
    }
  }
}

Almacenamiento

La memoria es adecuada para desarrollo, pruebas y un único proceso. Cada proceso mantiene contadores independientes.

Un almacenamiento personalizado implementa RateLimitStore.consume(). En producción horizontal usa RedisRateLimitStore o una implementación compartida con operaciones atómicas y expiración equivalente.