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 — Clients → Import 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 scopes → Create 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 mapper → X500 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 mapper → From predefined mappers → X500 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) — Clients → Passwork → vaya a la pestaña Client scopes → Add 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 Users → SSO 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 settings → General → Endpoints:

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 Users → SSO Settings y complete los valores:

Completar el valor de «Certificate»​

Abra y copie el certificado SSL generado en formato base64 — Realm settings → Keys → Certificate:

Obtener el certificado SSL público de Keycloak en base64

Pegue el certificado SSL copiado en el campo correspondiente — Settings and Users → SSO 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}