Seguridad
Apis públicas y privadas
Todas las APIs que publicas en Hefesto, por defecto, solo son accesibles con una contraseña que solo conoces tú (APIs privadas). Puedes habilitarlas para que sean accesibles por cualquiera (APIs públicas). Esto está explicado con más detalle en la sección de APIs públicas y privadas.
En entornos productivos, además, puedes usar los siguientes comandos para habilitar/deshabilitar la contraseña que te permite acceder a las APIs privadas desde fuera:
cd hefesto-server/scripts
./admin-open.sh # Para que se pueda acceder con contraseña desde fuera
./admin-close.sh # Para que NO se pueda acceder con contraseña desde fuera
Las APIs privadas siempre están disponibles en caso de que la llamada sea local. Puedes profundizar más leyendo la sección de conexiones locales.
RateLimit
La directiva RateLimit permite limitar el número de peticiones para proteger tus APIs contra abusos. Usa Redis como backend para contar peticiones por día y por minuto, tanto totales como por IP.
get /home:
RateLimit:
directive: RateLimit
path: get_home
dayTotal: 80000
dayIp: 10000
minuteTotal: 400
minuteIp: 45
Opciones de RateLimit:
- path: identificador único del endpoint (puede ser el path real o un nombre personalizado).
- dayTotal: máximo de peticiones totales en 24h.
- minuteTotal: máximo de peticiones totales por minuto.
- dayIp: máximo de peticiones por IP en 24h.
- minuteIp: máximo de peticiones por IP por minuto.
Si se excede algún límite, RateLimit lanza una excepción con status 429 (Too Many Requests).
Chequeo de apiKeys (CheckKey)
La directiva CheckKey protege endpoints comparando una clave esperada con la que envía el cliente. Si no coinciden, lanza una excepción 401 y detiene el flujo.
get /user:
CheckKey:
directive: CheckKey
expected: $.map.main.viewKey
current: $.message.queryParam.api-key
CheckKey admite dos parámetros:
- expected: la clave correcta. Puede venir de un map, de memory o ser un valor fijo.
- current: la clave que envía el cliente. Se obtiene del message (header, queryParam, etc.).
Ejemplo con clave hardcodeada (para tests):
CheckKey:
directive: CheckKey
expected: 987654321
current: $.message.header.api-key
CheckLocalCall
La directiva CheckLocalCall lanza una excepción 401 si la petición NO es una llamada local desde otra API en el mismo virtual-host. Útil para proteger endpoints que solo deben ser invocados internamente.
delete /database:
CheckLocalCall:
directive: CheckLocalCall
Drop:
directive: DatabaseDrop
OAuth, JWT y otros mecanismos
Hefesto solo provee las directivas CheckKey, CheckLocalCall y RateLimit, pero recuerda que puedes desarrollar tus propias directivas y que puedes hacer llamadas HTTP, lecturas/escrituras en base de datos y redis, por lo que podrías implementar tus propios mecanismos de seguridad como OAuth, JWT o sesiones con cookies.