hefestoapicontainer

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:

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:

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.