Recursos

Requisitos

  • Nginx con módulo para JWT Auth -

GitHub - max-lt/nginx-jwt-module: NGINX module to check for a valid JWT.

This is an NGINX module to check for a valid JWT.
https://github.com/max-lt/nginx-jwt-module

Request de ejemplo

curl --location --request GET "http://localhost:80/images/avatars/marco.richetta_small" \
--header "cookie: _ga=GA1.1.2021982238.1634757758; token=tokenJWT123; otra_cookie=123"

Directiva de Nginx

Necesito extraer el contenido de token

[$cookie_name](http://nginx.org/en/docs/http/ngx_http_core_module.html#var_cookie_) me permite tomar cualquier valor de la cookie

location /images {
 
    # Extraer el token de la cookie enviada
	  auth_jwt    $cookie_token;
		# Con esto puedo ver el valor de la variable en los response headers
		# En este caso el valor debería ser "tokenJWT123"
	  add_header  X-debug-message "$cookie_token" always;
}

Agregar headers para loggear mensajes

Referencia: https://serverfault.com/a/580739

location /images {
		add_header X-debug-message "$variable" always;
}

How to extract some value from cookie in nginx

I am new to Nginx and hope to get some help.
https://stackoverflow.com/a/45208334

Capturar GET/POST de un sistema

tcpdump -i eth0 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'

Conectar Nginx dockerizado con a una red de Docker

La forma más cómoda sería crear un docker-compose con los containers en cuestión. De esta manera Docker se encarga de crear automáticamente una network y linkea los containers.

En este caso tengo un stack con docker-compose y otro container, el de nginx, suelto en un Dockerfile.

  1. Levantar el stack del docker-compose

  2. Buscar el nombre de la red creada para estos containers

    > docker network ls
    NETWORK ID     NAME                                   DRIVER    SCOPE
    4f0eaab32a7a   enredarte_default                      bridge    local
    3ccaa94acfa4   feedback-backend_default               bridge    local
    0f6e5c8022b4   bot_default                            bridge    local
     
    # También podemos filtrar por columna
    > docker network ls --filter=name=bot
    0f6e5c8022b4   bot_default                            bridge    local
  3. Conectar el container aislado a la red creada por el docker-compose

    > docker network connect <nombre-de-la-red> <contenedor-aislado>
    # En mi caso
    docker network connect bot_default nginx-jwt-text
  4. Inspeccionar la red con los contenedores ya conectados

    1. Buscar la key "Containers" para ver la IP del contenedor que necesitamos
    > docker network inspect <nombre-de-la-red>
    # ...
    "Containers": {
        "3c352a937531dc63ecf1573ff551d49c56e8d1088ebbf28cbf8dc67f4c7cb225": {
          "Name": "bot-postgres-1",
          # ...
          "IPv4Address": "172.21.0.2/16",
        },
        "7f60d88ada504393f6d304bf1be32ff2fb1f273e65d22e226085c869e7f9e8c6": {
          "Name": "nginx-jwt-test",
          # ...
          "IPv4Address": "172.21.0.4/16",
        },
        "ff22471d066906d9c4f95be6d8f39aeaeac3b0788b847e328d3da80c260d1744": {
          "Name": "bot-botpress-1",
          # ...
          "IPv4Address": "172.21.0.3/16",
        }
      },
    # ...
  5. En Nginx se pueden redirigir las requests a 172.21.0.3

Desventajas

  • Cuando se reinicia el contenedor que conectamos en el paso 3, debemos reconectarlo a la red.

Referencia