Saltar al contenido principal

Configuración de SSO con Keycloak

peligro

Antes de configurar SSO, asegúrese de que el parámetro APP_URL en config.env coincida con el dominio actual de Passwork, por ejemplo — APP_URL=https://passwork.example.com

Esto es necesario para que el IDP pueda descargar los metadata. Además, el servidor de Passwork debe operar a través del protocolo HTTPS.

Los siguientes nombres de servidor se utilizan como ejemplos:

  • Proveedor (IDP) — keycloack.passwork.local
  • Servidor de Passwork (SP) — passwork.example.com

Creación de una aplicación mediante la importación de un archivo en Keycloak

Obtenga y edite el archivo para crear una aplicación en el lado del IDP.

keycloack.json

Su navegador no admite la visualización de JSON

Abrir en una nueva pestaña

"clientId": "https://your_host/api/v1/sso/metadata",
"adminUrl": "https://your_host/api/v1/sso/acs",
"baseUrl": "https://your_host/*",
"saml.logout.url": "https://your_host/api/v1/sso/sls"

Abra la interfaz web de Keycloak y vaya a — ClientsImport client:

Importar archivo .json para crear una aplicación en Keycloak

Realice las siguientes acciones:

  • Importe el archivo de aplicación modificado;
  • Establezca el nombre de la aplicación que se está creando;
  • Desactive — Encrypt assertions;
  • Desactive — Client signature required.

Guarde los cambios realizados:

Seleccionar archivo y editar .json importado

Si es necesario, puede cambiar el identificador único de usuario (NameID) dentro de la aserción SAML después de guardar los pasos anteriores:

Ejemplo de cambio de NameID en la aserción SAML
peligro

Recomendamos especificar username o email, dependiendo del valor elegido, el inicio de sesión del usuario en Passwork puede tener los siguientes formatos:

Configuración de la transmisión de roles de usuario en la aserción SAML

Vaya y cree un conjunto de configuraciones común para la aplicación (SP) — Client scopesCreate client scope:

Crear una plantilla de configuración para la aplicación

Realice las siguientes acciones:

  • Establezca el nombre;
  • Type — Default;
  • Protocol — SAML.
Editar parámetros de la plantilla creada

Abra la pestaña Mappers y cree aserciones de atributos para transmitir atributos adicionales del usuario desde Keycloak (IDP) a Passwork (SP):

  • Adición de una aserción para transmitir email:
    • Add predefined mapperX500 email;
    • Abra la aserción añadida desde la plantilla y cambie:
      • SAML Attribute Name — email;
      • SAML Attribute NameFormat — Basic.
  • Adición de una aserción para transmitir firstName:
    • Add mapperFrom predefined mappersX500 surname;
    • Abra la aserción añadida desde la plantilla y cambie:
      • Property — firstName;
      • SAML Attribute Name — firstName;
      • SAML Attribute NameFormat — Basic.
Añadir atributos de usuario a enviar en la plantilla

Asigne el conjunto de configuraciones creado (Client scope) a la aplicación creada (SP) — ClientsPasswork → vaya a la pestaña Client scopesAdd client scope:

Añadir la plantilla a la aplicación Passwork

Seleccione el conjunto creado passwork_client_scope de la lista con Assigned type — Default:

Seleccionar la plantilla creada y añadirla en modo Default

Elimine la plantilla de configuración añadida por defecto — role_list:

Eliminación de la plantilla predeterminada

Configuración y completar los parámetros de Single Sign-On (SSO) en Passwork

Completar los valores de «User Attributes»

Inicie sesión en la interfaz web de Passwork, vaya a — Settings and UsersSSO Settings y complete los atributos de mapeo:

  • Email attribute — email;
  • Full name attribute — firstName.

Completar los valores de «Identity Provider → Passwork»

Abra la configuración del proveedor de servicios (IDP) — Realm settingsGeneralEndpoints:

Ir a la ubicación para abrir los metadatos de Keycloak

Copie los siguientes valores de parámetros:

entityID="https://keycloack.passwork.local/realms/master"
<md:SingleLogoutService Location="https://keycloack.passwork.local/realms/master/protocol/saml"/>
<md:SingleSignOnService Location="https://keycloack.passwork.local/realms/master/protocol/saml"/>
Ejemplo de salida xml
Ejemplo de salida xml

Abra — Settings and UsersSSO Settings y complete los valores:

Completar el valor de «Certificate»

Abra y copie el certificado SSL generado en formato base64Realm settingsKeysCertificate:

Obtener el certificado SSL público de Keycloak en base64

Pegue el certificado SSL copiado en el campo correspondiente — Settings and UsersSSO Settings.

Abra la ventana de inicio de sesión en la interfaz web de Passwork e inicie sesión a través de SSO para verificar la configuración correcta:

Autenticarse en Passwork usando SSO

Posibles errores

info

Si ocurren errores, se encontrarán en el archivo de registro de PHP

La respuesta SSO no puede descifrarse correctamente porque la huella digital del certificado se copió incorrectamente o es la huella digital del certificado incorrecto:

OneLogin_Saml2_Error: invalid_response LastErrorReason: Signature validation failed. SAML Response rejected in /var/www/app/modules/Admin/SSO/SsoController.php:78\nStack trace:\n#0 [internal function]: Passwork\\Modules\\Admin\\SSO\\SsoController->acsAction()\n#1 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#2 [internal function]:Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#3 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#4 {main}

El valor actual del host en el parámetro APP_URL del archivo config.env es incorrecto:

OneLogin_Saml2_Error: Invalid array settings: sp_acs_url_invalid, sp_sls_url_invalid in /var/www/app/vendors/php-saml/lib/Saml2/Settings.php:122\nStack trace:\n#0 /var/www/app/vendors/php-saml/lib/Saml2/Auth.php(152): OneLogin_Saml2_Settings->__construct()\n#1 /var/www/app/modules/Admin/SSO/SsoService.php(53): OneLogin_Saml2_Auth->__construct()\n#2 /var/www/app/modules/Admin/SSO/SsoController.php(33): Passwork\\Modules\\Admin\\SSO\\SsoService->getAuth()\n#3 [internal function]: Passwork\\Modules\\Admin\\SSO\\SsoController->loginAction()\n#4 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#5 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#6 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#7 {main}, referer: 

Al usuario le falta el atributo utilizado para el inicio de sesión:

OneLogin_Saml2_Error: invalid_response LastErrorReason: The status code of the Response was not Success,was Responder -> urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy in /var/www/app/modules/Admin/SSO/SsoController.php:78\nStack trace:\n#0 [internal function]:Passwork\\Modules\\Admin\\SSO\\SsoController->acsAction()\n#1 [internal function]: Phalcon\\Dispatcher\\AbstractDispatcher->callActionMethod()\n#2 [internal function]:Phalcon\\Dispatcher\\AbstractDispatcher->dispatch()\n#3 /var/www/public/index.php(91): Phalcon\\Mvc\\Application->handle()\n#4 {main}