Truke KF permite gestionar la autenticación de usuarios de dos formas: con usuarios propios almacenados en la misma base de datos que los datos de KF, o con inicio de sesión único mediante un proveedor de identidad externo usando OpenID Connect (OIDC).
La configuración predeterminada almacena las credenciales de usuario en la base de datos de KF. No se requiere configuración adicional — es el modo sql, activo cuando no hay ninguna sección `[oidc]` en kf.ini.
Cada usuario tiene tres campos: nombre de usuario (normalmente una dirección de correo electrónico), contraseña y una cadena de etiquetas ACL. Las etiquetas ACL controlan qué ítems puede ver y editar el usuario — véase control de acceso para más información.
Los usuarios pueden añadirse, modificarse o eliminarse desde la interfaz de administración en `/admin/users`.
OIDC delega la autenticación en un proveedor de identidad (IdP) externo, como Google, Microsoft Entra (Azure AD), o una instancia propia de Keycloak o Dex. Los usuarios inician sesión a través del IdP — KF nunca ve su contraseña. El IdP emite un token firmado que KF verifica; si la firma es válida, se concede el acceso.
OIDC y los usuarios internos coexisten. La página de inicio de sesión muestra tanto el formulario de contraseña como el botón de inicio de sesión único; cada usuario puede utilizar el método que le corresponda.
Añadir una sección `[oidc]` a kf.ini:
[oidc] provider=https://accounts.google.com client_id=123456789-abc.apps.googleusercontent.com client_secret=GOCSPX-… redirect_url=https://tuapp.ejemplo.com/oidc/callback default_acl=staff
| Clave | Requerida | Descripción |
|---|---|---|
provider | sí | URL base de descubrimiento OIDC — KF añade `/.well-known/openid-configuration` para localizar los endpoints automáticamente |
client_id | sí | ID de cliente emitido por el IdP |
client_secret | sí | Secreto de cliente emitido por el IdP |
redirect_url | sí | Debe coincidir exactamente con la URL de callback registrada en el IdP: https://tuapp.ejemplo.com/oidc/callback |
default_acl | no | Etiqueta(s) ACL asignadas a los nuevos usuarios en su primer inicio de sesión (por defecto: staff) |
Si provider está ausente o vacío, OIDC queda desactivado.
Cuando un usuario inicia sesión por primera vez mediante OIDC, KF comprueba si su dirección de correo electrónico ya existe en la base de datos de usuarios. Si no existe, se crea un registro automáticamente con contraseña vacía y el valor de default_acl. En los inicios de sesión posteriores se utiliza el registro existente — las etiquetas ACL pueden modificarse manualmente en `/admin/users` en cualquier momento.
Para aprovisionar un usuario antes de su primer inicio de sesión, añadirlo desde `/admin/users` dejando la contraseña en blanco.
1. Ir a Google Cloud Console → APIs & Services → Credentials.
2. Crear un OAuth 2.0 Client ID de tipo Web application.
3. Añadir https://tuapp.ejemplo.com/oidc/callback en Authorised redirect URIs.
4. Copiar el client ID y el secreto en kf.ini.
provider=https://accounts.google.com
1. Registrar una aplicación en Azure Active Directory → App registrations.
2. Añadir https://tuapp.ejemplo.com/oidc/callback como URI de redirección (tipo: Web).
3. Crear un secreto de cliente en Certificates & secrets.
4. Anotar el tenant ID (Directory ID).
provider=https://login.microsoftonline.com//v2.0
1. Crear un cliente en el realm correspondiente con Client authentication activado.
2. Establecer la URI de redirección válida como https://tuapp.ejemplo.com/oidc/callback.
3. Copiar el client ID y el secreto.
provider=https://keycloak.ejemplo.com/realms/
Dex es un proveedor OIDC ligero y autoalojado que federa identidades desde LDAP, Active Directory, GitHub, Google, Microsoft y proveedores SAML 2.0. Es una buena opción para instalaciones en local o para conectar KF con un proveedor de identidad SAML heredado.
1. Instalar Dex
# Binario curl -Lo dex https://github.com/dexidp/dex/releases/latest/download/dex_linux_amd64 chmod +x dex # Docker docker pull ghcr.io/dexidp/dex:latest
2. Escribir config.yaml
issuer: https://dex.ejemplo.com/dex
storage:
type: sqlite3
config:
file: /var/dex/dex.db
web:
http: 0.0.0.0:5556
oauth2:
responseTypes: [code]
skipApprovalScreen: true
staticClients:
- id: kfserver
secret: cambiar-por-una-cadena-aleatoria-larga
name: Truke KF
redirectURIs:
- https://tuapp.ejemplo.com/oidc/callback
connectors:
- type: ldap
id: ldap
name: Active Directory
config:
host: ldap.ejemplo.com:636
bindDN: cn=cuenta-servicio,dc=ejemplo,dc=com
bindPW: secreto
userSearch:
baseDN: ou=usuarios,dc=ejemplo,dc=com
filter: "(objectClass=person)"
username: sAMAccountName
emailAttr: mail
nameAttr: displayName
Sustituir el bloque connectors por la fuente de identidad que corresponda. Dex también admite GitHub, SAML 2.0 (ADFS, Shibboleth) y otros.
3. Arrancar Dex y verificar
./dex serve config.yaml curl https://dex.ejemplo.com/dex/.well-known/openid-configuration
4. Configurar kfserver
El valor de provider debe coincidir exactamente con la cadena issuer de config.yaml.
[oidc] provider=https://dex.ejemplo.com/dex client_id=kfserver client_secret=cambiar-por-una-cadena-aleatoria-larga redirect_url=https://tuapp.ejemplo.com/oidc/callback