Esta práctica actualmente se considera insegura por OWASP, quienes indican que debido a sus características, como la incapacidad de Cerrar Sesión, no debe ser utilizada en aplicaciones.
Por tanto, buscando alternativas para resolver este caso de uso, llegamos al proyecto vouch-proxy, que permite implementar un SSO, o Single Sign-on, para Nginx.
Un servicio Single Sign-on, o Inicio de Sesión Única, permite crear un punto de conexión con otros servicios que permiten acceso OAuth2, como por ejemplo Google, Github y OpenID, y así poder permitir acceso a recursos utilizando las credenciales de estos servicios.
En esta guía explicaremos cómo levantar una máquina que servirá de SSO para nuestro dominio, y lo conectaremos a Google for Business para autentificar recursos usando las cuentas existentes que provee el servicio.
En nuestros ejemplos usaremos el dominio example.com, y nuestro SSO estara alojado en login.example.com
Asumiremos que ya posees conocimientos básicos de los siguientes temas:
- Linux
- Nginx
- Letsencrypt u otro proveedor SSL
- Docker y Docker-compose
- OAuth2
Empezamos con una instancia de Linux (en nuestro caso Debian), configurada con un dominio para nuestro servidor SSO login.example.com, e instalamos nginx, docker y docker-compose y luego, aseguramos nuestro dominio login.example.com con SSL usando Letencrypt u otro.
Una vez configurada la instancia, necesitamos obtener los Tokens OAuth2 desde la Consola de Desarrolladores de Google. *Importante: es necesario contar con acceso de Super Administrador para crear las llaves en una cuenta Google for Business
Primero, debemos crear un proyecto en la Consola de Google.

Y luego, dentro del proyecto vamos a la sección > API y Servicios > Pantalla de Consentimiento de OAuth donde configuraremos la forma en que los usuarios verán nuestra solicitud de autenticación, junto con otros parámetros clave para nuestro servicio.

- Tipo de Aplicación: Publico si queremos acceso a nuestros servicios desde cualquier cuenta, o Privado si es que queremos acceso limitado solo para usuarios de nuestro dominio.
- Nombre de la aplicación
- Logotipo de la aplicación
- Dominios autorizados: dominio donde alojaras tu servicio
- Vínculo a la página principal de la aplicación
- Vínculo a la Política de Privacidad de la aplicación
Posterior a esto, entramos a la sección > API y Servicios > Credenciales > Crear Credenciales > ID de Cliente de OAuth

Elegimos tipo Aplicación Web, llenamos con el nombre y las direcciones del servidor de autenticación https://login.example.com, y la URL de redirección https://login.example.com/auth

Luego, Google nos entregará la información que necesitamos para continuar, el ID de Cliente y la llave secreta del mismo. Recuerda no compartir esta llave con nadie.

Una vez completada la creación del acceso OAuth es posible continuar con la instalación y configuración de Vouch y Nginx. Para esto, hemos dispuesto un repositorio con los archivos de ejemplo para que puedas levantar el servicio Vouch fácil y rápido!
El repositorio se encuentra disponible en: https://github.com/NIVEL4/voucher-docker-compose
Puedes clonarlo directamente en el directorio de tu preferencia, para este ejemplo usaremos /srv/vouch
$ git clone https://github.com/NIVEL4/voucher-docker-compose /srv/vouch
Cloning into '/srv/vouch'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 7 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), done.
Y posterior a esto editamos los dos archivos en la carpeta config/
Primero, el archivo config/config.yml donde especificaremos nuestro client_id y client_secret que obtuvimos en el proceso de creación en Google. Además, debemos ajustar las referencias al dominio example.com con el dominio que ustedes configuraron, estas son domains, callback_urls y preferredDomain.
Y luego, modificamos el archivo config/secret donde debemos llenar con un string largo y aleatorio. Lo podemos hacer automáticamente con el siguiente comando
$ base64 -w 128 /dev/urandom | tr -d /+ | head -n 1 | tee /srv/vouch/config/secret
ffMIEHSJZ8rLzkt0fawNhzWMPoR43FKtPpUNee7M13zJvFrUy8GmpTKlHjZ00J3KOndS3YILDMzl8f12A9igGeAwXd43yUPHnsUZCZOw7wKlwgjZmLylGoJj5zKU
Realizados estos cambios, nuestro servicio vouch está listo para correr. Lo que podemos hacer con el siguiente comando, desde el directorio /srv/vouch
$:/srv/vouch# docker-compose up -d
Creating network "vouch_default" with the default driver
Creating vouch_vouch-proxy_1 ... done
$:/srv/vouch# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d354132f51e voucher/vouch-proxy "/vouch-proxy" 40 seconds ago Up 40 seconds (health: starting) 127.0.0.1:9090->9090/tcp vouch_vouch-proxy_1
Si todo salió bien, nuestro servicio estará corriendo en el puerto 9090 de localhost, y solo podrá ser accedido desde la misma máquina.
Y para finalizar la integración, debemos configurar nuestro Nginx, con el dominio login.example.com, y luego proteger los sitios que queramos con nuestra instalación de vouch.
Para esto, hemos puesto algunos ejemplos en la carpeta nginx-config-examples del repositorio en github. Estos son login.example.com.conf y protected.example.com.conf. El primero, expone el dominio que aloja vouch hacia internet, y el segundo es un sitio protegido de ejemplo.
Si hemos configurado correctamente nginx, cuando queramos acceder a protected.example.com, este mostrará nuestra pantalla de Login, y una vez completada la autentificación, tendremos acceso a nuestro sitio protegido.

De esta manera hemos logrado proteger recursos utilizando autentificación OAuth2 para acceder a ellos. Siguiendo esta guía podrás implementar vouch para cualquier otro proveedor de OAuth2 también, como cualquiera en esta lista.


Debe estar conectado para enviar un comentario.