Inicio de sesión único (SSO)
Flowset Control admite el mecanismo de inicio de sesión único (SSO), que permite a los usuarios iniciar sesión en el sistema utilizando un proveedor de autenticación externo mediante el protocolo OpenID Connect (OIDC). El SSO proporciona una gestión centralizada de usuarios y roles, así como la capacidad de utilizar un inicio de sesión unificado en todas las aplicaciones de la infraestructura de la organización.
Como ejemplo de configuración de SSO, a continuación se muestra una integración con el sistema de gestión de identidades Keycloak.
Configuración de Flowset Control
Habilitar el modo SSO
Para reemplazar el formulario de inicio de sesión estándar con la autenticación basada en SSO, debes habilitar el uso de OIDC y establecer el parámetro Login Mode en oidc:
# Enable OIDC support
jmix.oidc.use-default-configuration=true
# Switch login mode
flowset.control.security.login-mode=oidc
Configuración del cliente OIDC
A continuación, debes configurar un cliente para conectarse a tu proveedor de SSO.
La configuración se realiza utilizando los mecanismos estándar de Spring Security mediante el archivo application.properties:
# Keycloak OIDC configuration
spring.security.oauth2.client.registration.keycloak.client-id=<client-id>
spring.security.oauth2.client.registration.keycloak.client-secret=<client_secret>
spring.security.oauth2.client.registration.keycloak.scope=openid, profile, roles
spring.security.oauth2.client.provider.keycloak.issuer-uri=http://localhost:8180/realms/<realm>
spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8180/realms/<realm>
jmix.oidc.jwt-authentication-converter.username-claim=preferred_username
jmix.oidc.default-claims-roles-mapper.roles-claim-name=roles
Notas:
-
keycloakes el identificador del proveedor (se puede cambiar, por ejemplo, a okta). -
Los parámetros
client-idyclient-secretson emitidos por tu proveedor de OpenID. -
issuer-uriapunta al OpenID Configuration Endpoint, por ejemplo:http://localhost:8180/realms/flowset/.well-known/openid-configuration. -
De forma predeterminada, el claim
subse utiliza como nombre de usuario. Para cambiarlo, utiliza:spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
Flowset Control implementa la compatibilidad con OIDC utilizando el Jmix OIDC Add-on. Puedes obtener más información sobre la configuración aquí: documentación oficial.
Configuración del contenedor (Docker)
Si Flowset Control se despliega en un contenedor, los parámetros de OIDC se pueden pasar mediante variables de entorno en el archivo docker-compose.yml:
services:
flowset-control-app:
image: flowset/flowset-control-community:latest
container_name: flowset-control-app
restart: "no"
environment:
MAIN_DATASOURCE_URL: "jdbc:postgresql://flowset-control-database/flowset-control"
MAIN_DATASOURCE_USERNAME: "root"
MAIN_DATASOURCE_PASSWORD: "root"
SERVER_PORT: "8081"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENTID: "<client-id>"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_CLIENTSECRET: "<client-secret>"
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KEYCLOAK_ISSUERURI: "http://localhost:8180/realms/<realm>"
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUERURI: "http://localhost:8180/realms/<realm>"
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_KEYCLOAK_USERNAMEATTRIBUTE: "preferred_username"
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KEYCLOAK_SCOPE: "openid, profile, roles"
JMIX_OIDC_JWTAUTHENTICATIONCONVERTER_USERNAMECLAIM: "preferred_username"
JMIX_OIDC_DEFAULTCLAIMSROLESMAPPER_ROLESCLAIMNAME: "roles"
JMIX_OIDC_USEDEFAULTCONFIGURATION: "true"
FLOWSET_CONTROL_SECURITY_LOGINMODE: "oidc"
ports:
- "8081:8081"
depends_on:
flowset-control-database:
condition: service_started
networks:
- flowset-control-net
flowset-control-database:
image: postgres:16.3
container_name: flowset-control-database
restart: "no"
environment:
POSTGRES_DB: "flowset-control"
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "root"
volumes:
- flowset-control-database_data:/var/lib/postgresql/data
networks:
- flowset-control-net
volumes:
flowset-control-database_data:
networks:
flowset-control-net:
driver: bridge
Configuración de una instancia local de Keycloak
Uno de los proveedores de OpenID más populares es Keycloak. Para explorar el plugin Jmix OIDC, puedes ejecutar Keycloak localmente utilizando Docker.
Ejecución de Keycloak con Docker
Utiliza el siguiente comando para ejecutar una instancia de Keycloak mediante Docker en el puerto 8180:
docker run -p 8180:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
--name keycloak \
quay.io/keycloak/keycloak:22.0 start-dev
Consulta la documentación de Keycloak para obtener más detalles.
URL de Keycloak: http://localhost:8180
Credenciales de administrador:
Username: admin
Password: admin
Puedes leer sobre la configuración de una instancia de Keycloak en la Guía de administración del servidor.
Configuración de Keycloak para Flowset Control
Creación de un realm
Inicia sesión en la consola de administración de Keycloak y completa los siguientes pasos:
-
En el panel izquierdo, haz clic en Add Realm.
-
Introduce un nombre de realm, por ejemplo
flowset. -
Haz clic en Create.
Creación de un cliente
Un cliente representa la aplicación Flowset Control que utilizará Keycloak para la autenticación.
-
Abre Clients y haz clic en Create.
-
Especifica los parámetros:
Parámetro Valor Client ID
flowset-controlClient Protocol
openid-connect
-
En la sección Capability config:
Parámetro Valor Client authentication
ON
-
En la sección Login Settings, establece:
Parámetro Valor Valid Redirect URIs
*(solo para desarrollo)Valid post logout redirect URIs
*(solo para desarrollo)Web Origins
*(solo para desarrollo)
Después de guardar el cliente, ve a la pestaña Credentials y copia el Client Secret. Este secreto se utilizará en la configuración de Flowset Control.
Creación de roles
Los roles en Keycloak deben coincidir con los códigos de rol utilizados en Jmix/Flowset Control.
-
Abre Realm roles → Add Role.
-
Introduce un nombre de rol, por ejemplo
system-full-access. -
Guarda los cambios.
Creación de un usuario
-
Abre Users → Add User.
-
Introduce un nombre de usuario, por ejemplo
johndoe. -
Guarda.
Después de guardar:
-
En la pestaña Credentials, establece una contraseña para el usuario.
-
En la pestaña Role Mappings, asigna el rol
system-full-access.
-
Configuración de un asignador de roles
Para asegurarte de que los roles se incluyan en el ID Token, crea un asignador:
-
Ve a Client scopes →
roles→ Mappers →realm roles. -
Haz clic en Create y completa los campos:
Campo Valor Mapper Type
User Realm RoleToken Claim Name
realm rolesClaim JSON Type
StringAdd to ID token
ONAdd to access token
ONAdd to userinfo
ON