666 - Un login para tus aplicaciones self-hosted

666 - Un login para tus aplicaciones self-hosted

Una interesante opción para poner #login a tus servicios #selfhosted en #docker con #traefik y en #linux. Sencillo, fácil, ligero y sin complicaciones.

1:25
-3:15

Existen cientos o miles de servicios que puedes auto alojar, y esto es una auténtica maravilla, porque es muy probable que encuentres el servicio que andabas buscando para realizar vete a saber que cosa. Sin embargo, y como ya te puedes imaginar, no todas los servicios cumplen con todas nuestras expectativas o exigencias. En ocasiones, nos gustaría que un determinado servicio tuviera alguna característica concreta que no tiene. En estas ocasiones, siempre, nos podemos poner amablemente en contacto con el desarrollador y preguntarle si implementaría esa característica. El propietario, puede acceder o no, eso ya es decisión única y exclusiva de él. Sin embargo, en ocasiones es posible que esa característica de la que adolece el servicio, la podemos conseguir de otra forma, y esto es precisamente de lo que trata este nuevo episodio, como puedes poner login a tus aplicaciones self-hosted o autoalojadas.

Un login para tus aplicaciones self-hosted

En mas de una ocasión te he hablado de uno u otro servicio que no tenía login, y te he indicado como puedes configurarlo utilizando Traefik. Sin embargo, a mi lo de la autenticación básica, no me termina de gustar. Y llevo bastante tiempo buscando una herramienta que se encargue de realizar esa autenticación.

Soy consciente de que existen multitud de servicios que puedes auto alojar igualmente, como pueden ser Authentik, Keycloak, y mas. Pero te tengo que decir, que muchos de ellos son realmente complejos de configurar, y lo cierto es que lo que buscaba era algo realmente sencillo y ligero, y lo cierto es que he dado con el clavo.

Tinyauth

Tal y como describe el propio desarrollador de la aplicación Tinyauth es la manera mas sencilla de proteger tus aplicación con una pantalla de login. Y realmente lo es, es lo que mas me ha gustado y lo que me ha hecho decantarme por este servicio.

Al contrario que otros servicios de autenticación, en el caso de TinyAuth no necesitas ni base de datos, ni complejos archivos de configuración ni nada por el estilo. Este servicio se configura directamente utilizando las variables de entorno, ya está, nada mas.

La segunda de las características que es que tiene soporte OAuth, con lo que es posible hacer login utilizando Google, GitHub o cualquier otro proveedor OAuth. Lo cierto es que estoy intentando hacerlo actualmente con Gitea y todavía no he dado como. Estoy a punto, pero en el último momento siempre me devuelve un error, y todavía no he identificado el problema.

Y por último, se trata de una servicio realmente ligero. Apenas son 20 MB, con lo que incluso en una Raspberry Pi podrías utilizarlo sin problemas.

Instalación y configuración

Lo primero y principal es modificar la configuración en Traefik. Para ello tienes que cambiar el archivo dynamic.yaml, que es donde, en mi caso, guardo la configuración dinámica de Traefik.

En este archivo tienes que añadir un nuevo middleware, en concreto,

tinyauth:
  forwardauth:
  address: http://tinyauth:3000/api/auth

Recuerda que al ser la configuración dinámica no vas a necesitar reiniciar Traefik, sino que directamente ya lo puedes comenzar a utilizar.

Por otro lado, a continuación tienes el docker-compose.yml, para el servicio. Aquí, evidentemente, tendrás que cambiar, el SECRET, así como tus credenciales, y en caso de que quieras utilizar GitHub, necesitarás configurarlo para ello.

Para obtener el SECRET, lo puedes hacer con el siguiente comando:

tr -dc A-Za-z0-9 </dev/urandom | head -c 32; echo
services:
  tinyauth:
    container_name: tinyauth
    image: ghcr.io/steveiliop56/tinyauth:latest
    restart: unless-stopped
    init: true
    environment:
      SECRET: KbbwqmqpCaLKj2f6Rbm0vM6kbMmNrT1V
      APP_URL: https://tinyauth.tuservicio.es
      USERS: tu@correo.es:$$2a$$10$$1rAn5S.jSDqm6aEcl2x3aeg/TqJvqzw4jzDpUw1go7uJUzw98nHn.
      GITHUB_CLIENT_ID: 4VGp0WYv710wQ12cVktl
      GITHUB_CLIENT_SECRET: VQOG0ovflDAsXCYpEO6OKSTmXebW6DvhbD7HGtip
      OAUTH_WHITELIST: tu@correo.es
      DISABLE_CONTINUE: true
      COOKIE_EXPIRY: 3600
    networks:
      - proxy
    labels:
      traefik.enable: true
      traefik.http.routers.tinyauth.rule: Host(`tinyauth.tuservidor.es`)
      traefik.http.services.tinyauth.loadbalancer.server.port: 3000
      traefik.http.routers.tinyauth.entrypoints: https

networks:
  proxy:
    external: true

A partir de aquí todo es tremendamente sencillo. Para cada servicio al que le quieres añadir autenticación simplemente tienes que incluir la siguiente etiqueta,

traefik.http.routers.<nombre>.middlewares: tinyauth@file

Donde tienes que sustituir <nombre> por el que corresponde. Por ejemplo, acutalmente estoy probando Homer, como dashboard, y este no tiene autenticación. Así que estoy utilizando el siguiente docker-compose.yml,

services:
  homer:
    image: b4bz/homer
    container_name: homer
    restart: unless-stopped
    init: true
    volumes:
      - ./assets:/www/assets
    user: 1000:1000
    environment:
      - INIT_ASSETS=1 # default
    networks:
      - proxy
    labels:
      traefik.enable: true
      traefik.http.services.homer.loadbalancer.server.port: 8080
      traefik.http.routers.homer.entrypoints: https
      traefik.http.routers.homer.rule: Host(`homer.tuservidor.es`)
      traefik.http.routers.homer.middlewares: tinyauth@file

networks:
  proxy:
    external: true

Otro ejemplo

En el episodio 659 te hablé sobre como podías tener toda la información en un solo sitio con Docker. Otra auténtica madriguera de conejo de las que te traigo en los últimos episodios.

Por resumirte, se trata de una herramienta que te permite crear un dashboard de toda la información que te gustaría ver de un solo vistazo. Sin embargo, tenía un problema, y es que no tenía *autenticación. En este caso también puedes darle autenticación, de la misma forma. Te dejo el docker-compose.yml, para que lo veas,

services:
  glance:
    image: glanceapp/glance
    container_name: glance
    init: true
    restart: unless-stopped
    volumes:
      - ./glance.yml:/app/glance.yml
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    networks:
      - proxy
    labels:
      - traefik.enable=true
      - traefik.http.services.glance.loadbalancer.server.port=8080
      - traefik.http.routers.glance.entrypoints=https
      - traefik.http.routers.glance.rule=Host(`glance.tuservidor.es`)
      - traefik.http.routers.glance.middlewares=tinyauth@file

networks:
  proxy:
    external: true

Bajo el capó de Tinyauth

En estos últimos tiempos que estoy haciendo algunos servicios con backend y frontend, estoy mirando con mucho detenimiento, que tecnologías están utilizando. Así, en el caso de Tinyauth, el desarrollador se ha decantado por utilizar Go en el backend, mientras que para el frontend está utilizando React. Y los componentes que utiliza para React son los de Mantine, que en particular también he estado mirando para alguna de las aplicaciones que ando haciendo.

Igual que en otras ocasiones, a este servicio le hecho en falta alguna que otra configuración, o incluso, la idea de personalizarlo de alguna forma concreta. En seguida me entran las ganas de hacer mi propia configuración o personalización. Vamos, que me dan ganas de desarrollarlo, y tengo que refrenar esos impulsos.

Dos comentarios adicionales

nvim-scrollview

Un plugin para Neovim, que te añade una barra de desplazamiento vertical con signos. Esta barra de desplazamiento es interactiva, de forma que dependiendo de lo que estés haciendo te muestra una información u otra.

Por ejemplo, si estás realizando una búsqueda, en la barra de desplazamiento vertical, verás todas las apariciones. Igualmente pasa con los errores y muchas mas información.

Por otro lado, puedes interactuar con todos estos elementos utilizando el ratón, lo cual en determinados casos puede ser interesante. Esto a pesar de que, como sabes, no me gusta hacer uso del ratón.

Puedes encontrar mucha mas información de este complemento en el GitHub de nvim-scrollview.

Orbit

Por fin Firefox ha sacado el asistente de IA. Le he dado una primera probada y me parece realmente interesante, aunque actualmente solo está disponible en inglés. Me gusta como lo han implementado, porque no está incrustado en el navegador, sino que es una extensión que puedes instalar.

Es curioso, porque lo que hace es poner un icono flotante sobre la página en la que te sitúas ofreciéndote diferentes acciones a realizar.


Más información,

1 comentario en “Un login para tus aplicaciones self-hosted

  1. TX
    txolo hace 2 semanas

    Herramienta super útil y ligera para la realizar autenticaciones. Una maravilla, gracias ateareo!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *