Usuarios

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).

Usuarios internos

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`.

Single Sign-On (OIDC)

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.

Configuración

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
ClaveRequeridaDescripción
providerURL base de descubrimiento OIDC — KF añade `/.well-known/openid-configuration` para localizar los endpoints automáticamente
client_idID de cliente emitido por el IdP
client_secretSecreto de cliente emitido por el IdP
redirect_urlDebe coincidir exactamente con la URL de callback registrada en el IdP: https://tuapp.ejemplo.com/oidc/callback
default_aclnoEtiqueta(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.

Aprovisionamiento de usuarios

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.

Configuración del proveedor

Google

1. Ir a Google Cloud ConsoleAPIs & ServicesCredentials. 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

Microsoft Entra (Azure AD)

1. Registrar una aplicación en Azure Active DirectoryApp 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

Keycloak

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 (autoalojado, compatible con LDAP / Active Directory / SAML)

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