Nazwa wtyczki | Data utworzenia | Data ostatniej aktualizacji | Link do instalki | Krótki opis | Dział utrzymujący | Dokumentacja dla klienta | Typ licencji | Typ wtyczki | Id wtyczki |
---|---|---|---|---|---|---|---|---|---|
Plus SSO Authenticator | 2023-02-23 | 2025-03-11 | Link | Wtyczka umożliwiająca logowanie do systemu za pomocą SSO | Dev Core | Płatna | Wtyczka | com.suncode.plugin-plus-sso-authenticator |
Instalacja
Aby umożliwić logowanie za pomocą SSO, należy zainstalować i skonfigurować wtyczkę Plus SSO Authenticator.
Po prawidłowej konfiguracji, podczas wejścia na adres systemu PlusWorkflow użytkownik zostanie automatycznie przelogowany na stronę logowania do SSO. Aby zalogować się ręcznie do systemu należy wejść na adres systemu z dopiskiem /LoginManual.do. Będzie tam również opcja zalogowania się przez SSO za pomcą przycisku.
Przykład: https://www.test.plusworkflow.pl/PlusWorkflow/LoginManual.do
Konfiguracja SSO - jest to konfiguracja systemu SSO dla rozwiązania Azure-EntraId.
SSO przeważnie konfiguruje nam klient po przesłaniu do niego danych opisanych niżej (entity id, reply url, SLO, certyfikaty) jako SAML ServiceProvider metadata descriptor xml (generowanie pliku opisane niżej).
Dodajemy aplikację za pomocą Microsoft Entra ID -> Aplikacje dla przedsiębiorstw -> Nowa aplikacja
Następnie wybieramy Utwórz własną aplikację
Po utworzeniu przechodzimy do danej aplikacji i wybieramy metodę logowania jednokrotnego SAML
Do skonfigurowania serwera SSO musimy klientowi przekazać dane:
- Entity ID - powinno być w formacie URL. Jest to losowo wygenerowany przez nas identyfikator identyfikujący nas na serwerze SSO. Musi zaczynać się od litery.
Przykład: https://www.test.plusworkflow.pl/PlusWorkflow/api/authentication/sso/id/testId-if7-fi6-xh-c0
Wymagane jest połączenie HTTPS - Reply URL (Assertion Consumer Service URL)
- adres, na którym będziemy oczekiwać odpowiedzi z SSO. Jest to adres do systemu PlusWorkflow na endpoint /api/authentication/sso/login?provider=sso
Przykład: https://www.test.plusworkflow.pl/PlusWorkflow/api/authentication/sso/login?provider=sso
Wymagane jest połączenie HTTPS - SLO (Single Logout Service URL)
- adres, na którym będziemy oczekiwać sygnału o wylogowaniu w SSO lub odpowiedzi na żądanie wylogowania w SSO. Jest to adres do systemu PlusWorkflow na endpoint /api/authentication/sso/logout?provider=sso.
Przykład: https://www.test.plusworkflow.pl/PlusWorkflow/api/authentication/sso/logout?provider=sso
Generowanie SAML ServiceProvider metadata descriptor'a w xml:
Generator metadanych dla klienta z parametrami niezbędnymi do skonfigurowania SSO po stronie IdP znajduje się w pliku "Suncode SAML SP metadata generator.html".
Suncode SAML SP metadata generator.html
Generowanie certyfikatu x.509 pem opisane niżej "Tworzenie keys store jks".
Konfiguracja połączenia do SSO z PlusWorkflow
Po zainstalowaniu wtyczki w Administracja -> Konfiguracja systemu -> Konfiguracja wtyczek pojawi się opcja Plus SSO Authenticator.
1 ) W pierwszej zakładce SAML REQUEST (JSON) możemy:
- ustawić checkbox active, który oznacza czy logowanie przez SSO ma być aktywne. Jeżeli nie, to na formularzu logowania nie pojawi się przycisk logowania przez SSO.
- wybrać rozwiązanie autoryzacji SSO Solution
- disableSingleLogOut - pozwala wyłączyć wylogowanie przez SSO
- skonfigurować parametry wysyłane w requescie SAMLa
Version: domyślnie "2.0"
Issue instant date format: domyślnie "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
Issuer: adres plusWorkflow/authentication/sso/id/{entity id podany do konfiguracji serwera sso}. Np: https://www.test.plusworkflow.pl/PlusWorkflow/api/authentication/sso/id/testId-if7-fi6-xh-c0
Assertion Consumer Service URL: adres plusWorkflow/authentication/sso/login?provider=sso. Np: https://www.test.plusworkflow.pl/PlusWorkflow/api/authentication/sso/login?provider=sso
ForceAuthn: domyślnie puste
IsPassive: domyślnie puste
- skonfigurować dane do Key Store z kluczami do podpisywania wiadomości. Hasła do Key Store i klucza prywatnego zostaną zaszyfrowane i nie będzie można ich odszyfrować. Będą miały postać "enc:zaszyfrowane_hasło". Hasło do zaszyfrowania nie może zaczynać się od ciągu znaków "enc:".
Tworzenie key store jsk:
keytool -genkeypair -alias suncode -keyalg RSA -keysize 2048 -keystore mystore.jks -validity 365
CN=suncode,OU=IT,O=SUNCODE,L=POZNAN,ST=WP,C=PL |
Wyciągnięcie cer z jsk do wgrania w SSO: keytool -exportcert -keystore mystore.jks -alias suncode -file mycertificate.cer
Opcjonalnie utworzenie pem do wgrania w SSO w Base64: openssl x509 -inform der -in mycertificate.cer -out publiccert.pem
2) W drugiej zakładce ENTITY DESCRIPTOR (XML) zapisujemy entity descriptor z certyfikatem(należy go pobrać i wkleić), który otrzymaliśmy po skonfigurowaniu SSO Azure.
W Azure certyfikat znajduje się w następującym miejscu:
3) W trzeciej zakładce POST AUTH HANDLERS możemy skonfigurować co ma dziać się po autentykacji SSO
createUserFromDataSourceId - nazwa źródła danych na podstawie którego ma być utworzony użytkownik w systemie jeżeli jeszcze nie istnieje (więcej szczegółów tutaj)
defaultGroupNames - domyślne grupy do których zostanie przypisany nowo utworzony użytkownik przez źródło danych skonfigurowane w parametrze createUserFromDataSourceId (gurpy można podawać rozdzielająć je średnikiem).
extraAuthVerifiers - dodatkowe autentykacje użytkownika jeżeli SSO zwróci odpowiedź i użytkownik został rozpoznany w PWFL. Jest to tablica weryfikatorów gdzie każdy z nich ma do skonfigurowania parametry:
- firstVerifierValueProvider - dostawca pierwszej wartości do porównania
- secondVerifierValueProvider - dostawca drugiej wartości do porównania
- ignoreCase - parametr określający czy wartości porównywać z uwzględnieniem wielkości liter
Dostawcy wartości do porównania składają się z parametrów type i param. Dostępne wartości parametru type: - type:
- STATIC_VALUE - zwrócona zostanie wartość wpisana w parametrze "param"
- AUTHENTICATION_RESULT_ATTRIBUTE - nazwa parametru podana jako "param" jest szukana w odpowiedzi SSO (SamlResponse) w sekcji AttributeStatement i wartość dla tego parametru zostaje zwrócona
- VALUE_FROM_DATA_SOURCE_WITH_PWFL_USERNAME_AS_INPUT_VALUE - zwrócona zostanie wartość ze źródła danych o identyfikatorze takim jaki zostanie ustawiony w parametrze "param".
Parametr wejściowy powinien mieć id "value" i typ tekstowy - w parametrze wejściowym wtyczka SSO ustawi wartość username z systemu PlusWorkflow użytkownika który został zwrócony przez SSO (czyli wartość zwrócona przez SSO po przetworzeniu przez interceptory jeżeli zostały skonfigurowane)
Parametr wyjściowy powinien mieć id "value" i typ tekstowy - w parametrze wyjściowym źródło danych powinno zwracać wartość do porównania
- VALUE_FROM_DATA_SOURCE_WITH_SSO_USERNAME_AS_INPUT_VALUE - zwrócona zostanie wartość ze źródła danych o identyfikatorze takim jaki zostanie ustawiony w parametrze "param".
Parametr wejściowy powinien mieć id "value" i typ tekstowy - w parametrze wejściowym wtyczka SSO ustawi identyfikator użytkownika zwrócony przez SSO.
Parametr wyjściowy powinien mieć id "value" i typ tekstowy - w parametrze wyjściowym źródło danych powinno zwracać wartość do porównania
Przykładowa konfiguracja POST AUTH HANDLERS
{ "createUserFromDataSourceId": "data_source_id", "defaultGroupNames": "Administrators,Test", "extraAuthVerifiers": [ { "firstVerifierValueProvider": { "type": "AUTHENTICATION_RESULT_ATTRIBUTE", "param": "param_name" }, "secondVerifierValueProvider": { "type": "VALUE_FROM_DATA_SOURCE_WITH_PWFL_USERNAME_AS_INPUT_VALUE", "param": "data_source_id" }, "ignoreCase": true } ], "manualLogOutRedirect": { "redirectType": "REDIRECT_TO_PAGE_WITH_HTML", "value": "<p style=\"font-weight: bold; font-size: 13px;\">Do widzenia</p>", "localizedValue": { "en": "<p style=\"font-weight: bold; font-size: 13px;\">Bye</p>" } }, "automaticLogOutRedirect": { "redirectType": "REDIRECT_TO_URL", "value": "/Login.do" }, "authenticationFailedRedirect": { "redirectType": "REDIRECT_TO_URL", "value": "/LoginManual.do" } }
Uwaga! Każda modyfikacja konfiguracji wymaga restartu wtyczki.
Identyfikacja użytkowników
Zwracany identyfikator z SSO porównywany jest z polem userid w systemie PlusWorkflow.
Jeżeli SSO zwraca adres e-mail użytkownika, można użyć interceptora uwierzytelniania LoginByEmailInterceptor, aby umożliwić logowanie do systemu za pomocą adresu e-mail Interceptory uwierzytelniania.
Jeżeli SSO zwraca inną wartość niż userId w PlusWorkflow, można użyć interceptora uwierzytelniania LoginByDatasourceInterceptor, aby umożliwić logowanie do systemu mapując wartość zwróconą przez SSO z wartością zwracaną przez źródło danych Interceptory uwierzytelniania.