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, debe 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, debe configurar un cliente para conectarse a su 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 su 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, utilice:spring.security.oauth2.client.provider.keycloak.user-name-attribute=preferred_username
Flowset Control implementa la compatibilidad con OIDC utilizando el Jmix OIDC Add-on. Puede 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 complemento Jmix OIDC, puede ejecutar Keycloak localmente utilizando Docker.
Ejecución de Keycloak con Docker
Utilice 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
Consulte la documentación de Keycloak para obtener más detalles.
URL de Keycloak: http://localhost:8180
Credenciales de administrador:
Username: admin
Password: admin
Puede 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
Inicie sesión en la consola de administración de Keycloak y complete los siguientes pasos:
-
En el panel izquierdo, haga clic en Add Realm.
-
Introduzca un nombre de realm, por ejemplo
flowset. -
Haga clic en Create.
Creación de un cliente
Un cliente representa la aplicación Flowset Control que utilizará Keycloak para la autenticación.
-
Abra Clients y haga clic en Create.
-
Especifique 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, establezca:
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, vaya a la pestaña Credentials y copie 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.
-
Abra Realm roles → Add Role.
-
Introduzca un nombre de rol, por ejemplo
system-full-access. -
Guarde los cambios.
Creación de un usuario
-
Abra Users → Add User.
-
Introduzca un nombre de usuario, por ejemplo
johndoe. -
Guarde.
Después de guardar:
-
En la pestaña Credentials, establezca una contraseña para el usuario.
-
En la pestaña Role Mappings, asigne el rol
system-full-access.
-
Configuración de un asignador de roles
Para asegurarse de que los roles se incluyan en el ID Token, cree un asignador:
-
Vaya a Client scopes →
roles→ Mappers →realm roles. -
Haga clic en Create y complete 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