Sesiones, seguridad y licencia#
La configuración de Empowerment Center para las sesiones de los usuarios, el retardo tras intentos fallidos, la clave que cifra los secretos, las credenciales de servicio, la licencia y lo que enseña la pantalla de entrada. Los usuarios, los roles, el inicio de sesión único y SCIM se explican en Seguridad.
La clave de los secretos#
ECENTER_SECRETS_KEY (ecenter.secrets.encryption-key) es una clave AES de 256 bits en Base64. Cifra en la BD propia:
- las contraseñas de las conexiones a las BD de los clientes;
- la clave privada con que ECenter firma sus propios tokens (los de la incrustación y los del navegador sin interfaz).
Se genera con:
Sin ella, o si no son 32 bytes en Base64, el backend no arranca.
Si cambia o se pierde, el backend arranca igual, pero:
- las contraseñas guardadas no se pueden descifrar: cada conexión enseña «La contraseña guardada no se puede descifrar: vuelva a introducirla.», con Cambiar contraseña…, y no se puede usar hasta que se escriba;
- la clave de firma de la instalación se sustituye sola por otra; los tokens que estuvieran en vuelo (5 minutos como mucho) dejan de valer.
Para cambiarla a propósito: arranque con la nueva y vuelva a escribir la contraseña de cada conexión en Administración › Conexiones.
Atención
Guarde la clave aparte y con la misma protección que las copias de la BD propia. Una copia de la BD sin la clave no descifra las contraseñas, y quien tenga las dos tiene las contraseñas de las BD de los clientes.
Sesiones#
La sesión de la aplicación se guarda en la BD propia: sobrevive a un reinicio del backend y la encuentra cualquier instancia. Va en la cookie SESSION, que el código de la página no puede leer (HttpOnly), con SameSite=Lax y, detrás de TLS, Secure.
| Propiedad | Variable | Por defecto | Qué es |
|---|---|---|---|
spring.session.timeout |
ECENTER_SESSION_TIMEOUT |
30m |
La caducidad de una sesión sin actividad. |
ecenter.security.sessions.max-duration |
ECENTER_SESSION_MAX_DURATION |
12h |
La duración máxima desde que se entra, aunque se siga usando. 0, sin máximo. Con el inicio de sesión único, volver a entrar no pide nada. |
ecenter.security.sessions.cleanup-interval |
1m |
Cada cuánto se borran las sesiones caducadas. Cada una deja en la auditoría su caducidad. | |
ecenter.security.sessions.cleanup-enabled |
true |
Borrarlas solas. Con false no las borra nadie: no lo cambie. |
Además, algunos cambios en un usuario (inhabilitarlo, bloquearlo, eliminarlo, cambiarle el login o la contraseña, quitarle Administración del Sistema) cierran sus sesiones en todas las instancias: la lista completa está en Sesiones y entrada.
Las sesiones de la incrustación tienen sus propias reglas (véase Servicios).
Retardo tras intentos fallidos#
Tras varios fallos seguidos con el mismo login, ECenter hace esperar antes del siguiente intento (no bloquea la cuenta). Cómo funciona, con lo que ve el usuario, está en Sesiones y entrada.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.security.login-delay.free-attempts |
3 |
Fallos seguidos sin retardo. |
ecenter.security.login-delay.initial |
1s |
La primera espera. |
ecenter.security.login-delay.max |
60s |
La espera más larga. |
ecenter.security.login-delay.reset-after |
1h |
Lo que tarda en olvidarse un fallo. |
Mientras dura la espera, POST /api/auth/login responde 429 con Retry-After y el código LOGIN_DELAYED, sin comprobar la contraseña. reset-after no puede ser menor que max, ni max menor que initial.
El primer administrador#
| Propiedad | Variable | Qué es |
|---|---|---|
ecenter.security.bootstrap-admin.login |
ECENTER_ADMIN_LOGIN |
El login del primer administrador. |
ecenter.security.bootstrap-admin.password |
ECENTER_ADMIN_PASSWORD |
Su contraseña: de 10 caracteres a 72 bytes. |
Solo se usan si la BD propia no tiene ningún usuario. Véase El primer administrador.
Credenciales de servicio#
Las credenciales con que otras aplicaciones entran en ECenter sin sesión (la API de consulta, el MCP, SCIM, la incrustación y el intercambio del metadata) caducan siempre. Cómo se crean está en Integraciones.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.security.credentials.default-lifetime.<ÁMBITO> |
QUERY_API: 90d, MCP: 90d, SCIM: 365d, EMBED: 365d, METADATA_EXCHANGE: 90d |
La caducidad que se propone al crearla. |
ecenter.security.credentials.max-lifetime.<ÁMBITO> |
QUERY_API: 365d, MCP: 365d, SCIM: 730d, EMBED: 365d, METADATA_EXCHANGE: 365d |
La caducidad más larga que se admite. |
ecenter.security.credentials.max-active-per-holder |
10 |
Las vigentes a la vez de un mismo titular (para rotarlas sin cortar el servicio). |
ecenter.security.credentials.touch-interval |
5m |
Cada cuánto, como mucho, se anota su último uso. |
ecenter.security.credentials.retention |
180d |
Lo que se conservan las revocadas o caducadas antes de purgarlas. |
ecenter.security.credentials.expiry-notice |
14d |
Con cuánta antelación se avisa por correo al titular de una credencial personal que caduca. |
ecenter.security.credentials.maintenance-interval |
1h |
Cada cuánto se purga y se avisa. |
ecenter.security.bearer.public-url |
ECENTER_PUBLIC_URL |
La dirección para los enlaces de los avisos. |
ecenter.security.bearer.access-audit-interval |
1h |
Cada cuánto, como mucho, se anota en la auditoría el uso de un mismo cliente (por instancia). |
ecenter.security.installation-keys.rotate-every |
90d |
Cada cuánto se rota sola la clave con que firma la instalación (al menos un día). La anterior sigue verificando un rato más. |
Los ámbitos son QUERY_API (API de consulta), MCP, SCIM, EMBED (incrustación) y METADATA_EXCHANGE (intercambio del metadata).
SCIM#
El aprovisionamiento de usuarios por SCIM (/api/scim/v2) se configura en ecenter.provisioning.*. Su uso, en Seguridad.
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.provisioning.scim.enabled |
true |
Con false, /api/scim/v2 responde 404. |
ecenter.provisioning.scim.allowed-addresses |
(cualquiera) | Las direcciones (CIDR) desde las que se admite: el proveedor de identidad o su agente. |
ecenter.provisioning.scim.max-results |
200 |
El máximo de una página. |
ecenter.provisioning.scim.max-filter-scan |
10000 |
Los usuarios que se evalúan en memoria con un filtro que no va por índice. Por encima, 400. |
ecenter.provisioning.scim.max-payload |
1MB |
El cuerpo más grande que se admite. Por encima, 413. |
ecenter.provisioning.activity-retention |
30d |
Lo que se conserva la actividad del aprovisionamiento. |
El inicio de sesión único#
Los proveedores de identidad se dan de alta con los registros estándar de Spring Boot (spring.security.oauth2.client.registration.<id> para OIDC y spring.security.saml2.relyingparty.registration.<id> para SAML), en el application.yml propio, y ECenter añade por cada uno ecenter.security.sso.providers.<id>.*: el texto del botón, el atributo del login, el del correo y si al salir se cierra también la sesión del proveedor. Todo ello, con ejemplos, en Seguridad.
La licencia#
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.licensing.warn-days |
30 |
Con cuántos días de antelación se avisa de que caduca la licencia. |
Las claves públicas con que se comprueban las licencias van dentro de la aplicación y no se configuran. Véase La licencia.
La pantalla de entrada#
Lo que enseñan la pantalla de entrada y Acerca de Empowerment Center, sin iniciar sesión:
| Propiedad | Por defecto | Qué es |
|---|---|---|
ecenter.about.login-help |
ECENTER_LOGIN_HELP (vacía) |
Un texto de ayuda, hasta 500 caracteres. |
ecenter.about.show-customer |
false |
Enseñar el cliente de la licencia. Viene apagado porque se ve antes de identificarse. |
ecenter.about.links |
(ninguno) | Hasta 5 enlaces del pie (label y url), solo http://, https:// o una ruta del propio servidor. |
ecenter:
about:
login-help: ¿Problemas para entrar? Llame a la extensión 1234
links:
- label: Aviso legal
url: https://intranet.example.org/aviso-legal
- label: Ayuda
url: https://intranet.example.org/ecenter