SSO-Konfiguration mit Keycloak
Stellen Sie vor der Konfiguration von SSO sicher, dass der Parameter APP_URL in config.env mit der aktuellen Passwork-Domain übereinstimmt, z. B. — APP_URL=https://passwork.example.com
Dies ist erforderlich, damit der IDP die Metadaten herunterladen kann. Außerdem muss der Passwork-Server über das HTTPS-Protokoll betrieben werden.
Die folgenden Servernamen werden als Beispiele verwendet:
- Anbieter (IDP) — keycloack.passwork.local
- Passwork-Server (SP) — passwork.example.com
Erstellen einer Anwendung durch Importieren einer Datei in Keycloak
Besorgen und bearbeiten Sie die Datei, um eine Anwendung auf der IDP-Seite zu erstellen.
keycloack.json
- json
"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"
Öffnen Sie die Keycloak-Weboberfläche und navigieren Sie zu — Clients → Import client:

Führen Sie die folgenden Aktionen aus:
- Importieren Sie die geänderte Anwendungsdatei;
- Legen Sie den Namen der zu erstellenden Anwendung fest;
- Deaktivieren Sie — Encrypt assertions;
- Deaktivieren Sie — Client signature required.
Speichern Sie die vorgenommenen Änderungen:

Bei Bedarf können Sie den eindeutigen Benutzerbezeichner (NameID) innerhalb der SAML-Assertion nach dem Speichern der vorherigen Schritte ändern:

Wir empfehlen, username oder email anzugeben. Abhängig vom gewählten Wert kann das Login des Benutzers in Passwork die folgenden Formate haben:
- username
- [email protected]
Konfiguration der Benutzerrollenübertragung in der SAML-Assertion
Navigieren Sie zur Erstellung eines allgemeinen Einstellungssatzes für die Anwendung (SP) — Client scopes → Create client scope:

Führen Sie die folgenden Aktionen aus:
- Legen Sie den Namen fest;
- Type — Default;
- Protocol — SAML.

Öffnen Sie den Tab Mappers und erstellen Sie Attribut-Assertions zur Übertragung zusätzlicher Benutzerattribute von Keycloak (IDP) an Passwork (SP):
- Hinzufügen einer Assertion zur Übertragung von email:
- Add predefined mapper → X500 email;
- Öffnen Sie die hinzugefügte Assertion aus der Vorlage und ändern Sie:
- SAML Attribute Name — email;
- SAML Attribute NameFormat — Basic.
- Hinzufügen einer Assertion zur Übertragung von firstName:
- Add mapper → From predefined mappers → X500 surname;
- Öffnen Sie die hinzugefügte Assertion aus der Vorlage und ändern Sie:
- Property — firstName;
- SAML Attribute Name — firstName;
- SAML Attribute NameFormat — Basic.

Weisen Sie den erstellten Einstellungssatz (Client scope) der erstellten Anwendung (SP) zu — Clients → Passwork → navigieren Sie zum Tab Client scopes → Add client scope:

Wählen Sie den erstellten Satz passwork_client_scope aus der Liste mit dem zugewiesenen Typ — Default:

Löschen Sie die standardmäßig hinzugefügte Einstellungsvorlage — role_list:

Konfiguration und Ausfüllen der Single Sign-On (SSO)-Parameter in Passwork
Ausfüllen der Werte „Benutzerattribute"
Melden Sie sich an der Passwork-Weboberfläche an, navigieren Sie zu — Einstellungen und Benutzer → SSO-Einstellungen und füllen Sie die Zuordnungsattribute aus:
- E-Mail-Attribut — email;
- Vollständiger-Name-Attribut — firstName.
Ausfüllen der Werte „Identity Provider → Passwork"
Öffnen Sie die Dienstanbieterkonfiguration (IDP) — Realm settings → General → Endpoints:

Kopieren Sie die folgenden Parameterwerte:
- xml
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"/>
Beispiel der XML-Ausgabe

Öffnen Sie — Einstellungen und Benutzer → SSO-Einstellungen und füllen Sie die Werte aus:
- Identifier (Entity ID) — https://keycloack.passwork.local/realms/master
- Login URL — https://keycloack.passwork.local/realms/master/protocol/saml
- Logout URL — https://keycloack.passwork.local/realms/master/protocol/saml
Ausfüllen des Werts „Zertifikat"
Öffnen und kopieren Sie das generierte SSL-Zertifikat im base64-Format — Realm settings → Keys → Certificate:

Fügen Sie das kopierte SSL-Zertifikat in das entsprechende Feld ein — Einstellungen und Benutzer → SSO-Einstellungen.
Öffnen Sie das Anmeldefenster in der Passwork-Weboberfläche und melden Sie sich über SSO an, um die korrekte Konfiguration zu überprüfen:

Mögliche Fehler
Wenn Fehler auftreten, befinden sich diese in der PHP-Protokolldatei
Die SSO-Antwort kann nicht korrekt entschlüsselt werden, da der Zertifikatsfingerabdruck falsch kopiert wurde oder es sich um den Fingerabdruck des falschen Zertifikats handelt:
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}
Der aktuelle Host-Wert im Parameter APP_URL der Datei config.env ist falsch:
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:
Dem Benutzer fehlt das für die Anmeldung verwendete Attribut:
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}