Dex IdP (OIDC Federado)¶
Dex es un Identity Provider (IdP) OIDC orientado a entornos cloud-native y self-hosted. En Frikiteam podemos usarlo como capa de federación para centralizar autenticación de múltiples backends (LDAP, OIDC, SAML, Keystone, etc.) y exponer un flujo OIDC uniforme a nuestras aplicaciones.
- Repositorio de referencia (fork): rasty94/dex
- Imagen usada en despliegues:
ghcr.io/rasty94/dex:latest
Cuándo usar Dex¶
- Cuando varias apps necesitan SSO con un único endpoint OIDC.
- Cuando quieres desacoplar apps de proveedores de identidad concretos.
- Cuando necesitas una solución ligera y portable para Kubernetes o Docker.
Arquitectura de autenticación¶
flowchart LR
U[Usuario] --> APP[Aplicación / RP]
APP --> DEX[Dex IdP]
DEX --> C1[Connector: Keystone]
DEX --> C2[Connector: LDAP/OIDC/SAML]
C1 --> IDP1[Proveedor externo]
C2 --> IDP2[Proveedor externo]
DEX --> TOK[ID Token / Access Token]
TOK --> APP
Flujo OIDC (Authorization Code)¶
sequenceDiagram
participant U as Usuario
participant A as Aplicación
participant D as Dex
participant P as Proveedor externo
U->>A: Accede a la app
A->>D: Redirect /auth
D->>P: Autenticación vía connector
P->>D: Usuario autenticado
D->>A: Code (redirect_uri)
A->>D: Exchange code por tokens
D->>A: ID Token + Access Token
A->>U: Sesión iniciada
Ejemplo rápido (Docker Compose)¶
services:
dex:
image: ghcr.io/rasty94/dex:latest
container_name: dex
restart: unless-stopped
command: ["dex", "serve", "/etc/dex/config.yaml"]
ports:
- "5556:5556" # OIDC HTTP
- "5557:5557" # gRPC API (opcional)
volumes:
- ./config.yaml:/etc/dex/config.yaml:ro
Ejemplo de config.yaml¶
issuer: http://127.0.0.1:5556/dex
storage:
type: sqlite3
config:
file: /var/dex/dex.db
web:
http: 0.0.0.0:5556
oauth2:
responseTypes: ["code"]
skipApprovalScreen: false
alwaysShowLoginScreen: true
staticClients:
- id: grafana
name: "Grafana"
secret: "<client-secret>"
redirectURIs:
- "https://grafana.example.com/login/generic_oauth"
connectors:
- type: keystone
id: keystone
name: "OpenStack Keystone"
config:
keystoneHost: https://keystone.example.com:5000
domain: default
keystoneUsername: dex-service
keystonePassword: <keystone-password>
Integración de aplicaciones (checklist)¶
- Registrar la app como
staticCliento vía API. - Configurar
issuery callback (redirectURIs) correctamente. - Validar que la URL pública de Dex sea accesible desde la app.
- Probar login y validar claims (
sub,email,groups).
Buenas prácticas¶
- Usar TLS en producción para
webygrpc. - Mover secretos a variables de entorno/secret manager.
- Definir expiraciones y políticas de rotación de claves.
- Activar telemetría y health checks para operación day-2.
Recursos¶
- Fork Frikiteam: https://github.com/rasty94/dex
- Documentación oficial Dex: https://dexidp.io/docs/