Puesta en marcha de authentik para proyectos internos
Este repositorio deja preparado todo lo necesario para que authentik actúe como proveedor SSO de los proyectos en /srv/projects. A continuación se describe el flujo recomendado para habilitar intranets protegidas, consolas de administración y emisión de JWT para APIs.
1. Variables de entorno y stack
- Copia
compose/.enva un lugar seguro y revisa los nuevos parámetros añadidos (AUTHENTIK_HOST,AUTHENTIK_OUTPOST_TOKEN). - Define
AUTHENTIK_OUTPOST_TOKENcon el token del outpost (paso 3). Para iniciar mientras no exista puedes dejarchangeme. - Arranca la plataforma:
docker compose -f compose/compose.yaml up -d.
Nota: el contenedor
serverexpone la interfaz web por127.0.0.1:9091(lo consume Caddy) y el contenedoroutpostexpone127.0.0.1:9092paraforward_auth.
2. Crear token del outpost y enlazarlo
- Accede a authentik (
https://auth.illanes00.cla través de Caddy) con un superusuario. - Navega a Applications ▸ Outposts, crea un nuevo Outpost tipo Proxy llamado
caddy-forward-authy anótate el token que entrega. - Actualiza
AUTHENTIK_OUTPOST_TOKENencompose/.envcon ese valor y reinicia sólo el outpost:docker compose -f compose/compose.yaml up -d outpost. - En la misma pantalla, asocia el Outpost a los proveedores que vayas creando (ver paso 4).
3. Importar grupos base y mapeo de JWT
El blueprint blueprints/10-groups-and-jwt.yaml crea los grupos básicos y añade un mapping para incluirlos en los tokens.
cd /srv/projects/auth
docker compose -f compose/compose.yaml exec -T server \
ak blueprint apply -f - < blueprints/10-groups-and-jwt.yamlDespués de importarlo, asigna usuarios a los grupos desde Directory ▸ Groups.
4. Proteger intranets y consolas con Caddy
Crea un Proxy Provider por cada sitio (ej.
admin-illanes00) definiendo:External host: URL pública (ej.https://admin.illanes00.cl).Internal host: URL interna a la que Caddy hace proxy (ej.http://127.0.0.1:8102).Authorization flow:default-provider-authorization-implicit-consentsuele ser suficiente.- Outpost: selecciona
caddy-forward-auth.
En Applications crea las tarjetas correspondientes y dales acceso únicamente a los grupos relevantes (ej. grupo
admin-illanes00).En Caddy utiliza el siguiente snippet de
forward_auth(ya se expone en127.0.0.1:9092):(authentik-forward) { forward_auth 127.0.0.1:9092 { uri /outpost.goauthentik.io/auth/caddy copy_headers X-authentik-username X-authentik-groups X-authentik-email } }Aplícalo en cada bloque del sitio protegido:
admin.illanes00.cl { import authentik-forward import illanes00-admin }Reinicia Caddy tras los cambios.
5. Emisión de JWT para las APIs
- Crea una OAuth2/OpenID Provider llamada
internal-apicon:Client Type:Confidential.Client ID/Secret: valores que usará el gateway (recomiendo guardarlos en 1Password).Redirect URIs: URLs de callback si usas authorization_code.Signing Key: usa el certificado por defecto o carga uno propio.Property mappings: incluyejwt-add-groups(del blueprint) además de los mappings estándar (openid,profile,email).Scopes: habilitaopenid profile emaily los que necesites (offline_access, etc.).Grant types: añadeclient_credentialssi necesitas tokens de servicio.
- Crea la aplicación
Internal APIy asígnala al provider anterior. - Asocia el grupo
api-clientsy añade a él los servicios que deban recibir tokens. - Desde tus APIs verifica el contenido del claim
groupspara autorizar acceso.
6. Referencias rápidas
- Dashboard:
https://auth.illanes00.cl/if/flow/. - Caddy snippet existente para authentik:
deploy/caddy.conf. - Blueprint aplicado:
blueprints/10-groups-and-jwt.yaml. - Token endpoint:
https://auth.illanes00.cl/application/o/internal-api/token/.
Con estos pasos tendrás SSO unificado, portales de intranet bajo autenticación central y emisión controlada de JWT con información de grupos para las APIs.
7. Personalizar el login con IllanesID
Los activos visuales están en
volumes/media/public/custom.cssyvolumes/media/public/assets/illanesid-logo.svg. Cambia los colores o el SVG si necesitas otro look.El blueprint
blueprints/20-brand-and-signup.yaml(copiado en/media/blueprints/20-brand-and-signup.yamldentro del contenedor) actualiza el brand, agrega enlaces al pie de página y crea el flujo de registroillanesid-signup.Aplícalo desde la máquina host:
docker compose -f compose/compose.yaml exec -T server \ ak blueprint_shell <<'PY' from authentik.blueprints.file import load load("/media/blueprints/20-brand-and-signup.yaml").apply() PYTras aplicar, recarga la página (
Ctrl+Shift+R) para invalidar el CSS en caché. Si no aparece el botón “Crear cuenta”, verifica que el blueprint haya quedado en estadoapplied(UI ▸ System ▸ Blueprints).
8. Provider internal-api
Los objetos viven en
blueprints/30-internal-api.yaml(también montado como/media/blueprints/30-internal-api.yamldentro del contenedor). El blueprint crea:- Provider OAuth2/OpenID
Illanes Internal API. - Aplicación
Internal APIasociada. - Binding automático al grupo
api-clientspara que sólo quienes estén en ese grupo puedan solicitar tokens.
- Provider OAuth2/OpenID
Aplícalo (o re-aplícalo si cambias redirect URIs) con:
docker compose -f compose/compose.yaml exec -T server \ ak blueprint_shell <<'PY' from authentik.blueprints.file import load load("/media/blueprints/30-internal-api.yaml").apply() PYCredenciales generadas (guárdalas en 1Password):
client_id:il5s1kauue3gzzm3gd8z7u13client_secret:w1Ok7nX7B-8AmygACAqsGYnYcpZRERcXtX7jJ0s2oS4eK5sOMpGQuPbj8J-fslu-
Ajusta la URL de callback si tu gateway expone otra ruta (
_redirect_urisen el blueprint). Tras editar, vuelve a aplicar el blueprint.Punto de token:
https://auth.illanes00.cl/application/o/internal-api/token/. El claimgroupsdel access token incluye los gupos gracias al mappingjwt-add-groups.