Recursos
Extraer token (o cualquier valor) de una cookie para autenticar
Requisitos
- Nginx con módulo para JWT Auth -
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
me permite tomar cualquier valor de la cookielocation /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; }
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.- Levantar el stack del docker-compose
- 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
- 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
- Inspeccionar la red con los contenedores ya conectados
- 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", } }, # ...
- 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.