Wersja Chrome: 87.0.4280.66
Wersja Edge: 86.0.622.69
Niedawno spotkałem się z problemem nadmiernego wygaszania sesji użytkownika w produkcie IBM BPM wersja 8.6.1.19003 w przeglądarkach internetowych Chrome i Edge. Problem był szczególnie uciążliwy w sytuacji gdy uruchamiano Human Service w iframe oraz skonfigurowane zostało SSO SPNEGO. Pobranie treści (formularza) serwisu kończyło się komunikatem błędu: Produkt IBM Business Automation Workflow nie mógł pobrać danych z sesji WWW. Mogła ona utracić ważność. (1dabd53a-4ba8-41db-871b-c236f784a418)
W logach produktu (plik SystemOut.log) można było znaleźć następujące wpisy związane z próbą uwierzytelniania użytkownika:
[11/26/20 13:29:48:311 CET] 000002c4 SpnegoHandler W com.ibm.ws.security.spnego.SpnegoHandler handleRequest CWSPN0021E: No delegated credentials were found for user: ttesteusz@example.com. [11/26/20 13:29:48:332 CET] 000002c4 UserCore I CWLLG0468I: Checking information for user userId(false) = User.34403, userName(false) = ttesteusz@example.com, fullName(false) = Tadeusz Testeusz, provider(false) = CN=Tadeusz Testeusz,OU=Users,DC=example,DC=com, userState(false) = 0, lastStateModified(false) = null, state = RECORD_STATE_UP_TO_DATE, saveSyncId = null, changedProperties: [] for updates. [11/26/20 13:29:48:339 CET] 000002c4 UserCore I CWLLG0468I: Checking information for user userId(false) = User.34403, userName(false) = ttesteusz@example.com, fullName(false) = Tadeusz Testeusz, provider(false) = CN=Tadeusz Testeusz,OU=Users,DC=example,DC=com, userState(false) = 0, lastStateModified(false) = null, state = RECORD_STATE_UP_TO_DATE, saveSyncId = null, changedProperties: [] for updates. [11/26/20 13:29:48:353 CET] 000002c4 SecurityCore I com.lombardisoftware.server.ejb.security.SecurityCore updateGroupMembership CWLLG1088I: Initializing session is done for user ttesteusz@example.com [11/26/20 13:29:48:375 CET] 000002c4 ControllerSer I CWLLG0006I: Initializing a new session. [11/26/20 13:29:48:386 CET] 000002c4 LoggerScripta I Uzytkownik: ttesteusz@example.com [11/26/20 13:29:48:521 CET] 000001b9 SpnegoHandler W com.ibm.ws.security.spnego.SpnegoHandler handleRequest CWSPN0021E: No delegated credentials were found for user: ttesteusz@example.com. [11/26/20 13:29:48:523 CET] 000001b9 ControllerSer I CWLLG0006I: Initializing a new session. [11/26/20 13:29:48:525 CET] 000001b9 UserCore I CWLLG0468I: Checking information for user userId(false) = User.34403, userName(false) = ttesteusz@example.com, fullName(false) = Tadeusz Testeusz, provider(false) = CN=Tadeusz Testeusz,OU=Users,DC=example,DC=com, userState(false) = 0, lastStateModified(false) = null, state = RECORD_STATE_UP_TO_DATE, saveSyncId = null, changedProperties: [] for updates. [11/26/20 13:29:48:528 CET] 000001b9 TWComponentWe W com.lombardisoftware.component.common.web.TWComponentWebUIImpl getDataObject Id: p1 [11/26/20 13:29:48:528 CET] 000001b9 TWComponentWe W com.lombardisoftware.component.common.web.TWComponentWebUIImpl getDataObject HttpSession.getAttributeNames(): UPDATED_USER_MEMBERSHIPS, com.lombardisoftware.SESSION_UID_KEY, userPreference, com.lombardisoftware.SESSION_TZ_KEY, com.lombardisoftware.servlet.util.SessionState, [11/26/20 13:29:48:546 CET] 000001b9 wle_portal E Produkt IBM Business Automation Workflow nie mógł pobrać danych z sesji WWW. Mogła ona utracić ważność. (1dabd53a-4ba8-41db-871b-c236f784a418) [11/26/20 13:29:48:546 CET] 000001b9 wle_portal E Produkt IBM Business Automation Workflow nie mógł pobrać danych z sesji WWW. Mogła ona utracić ważność.
Widzimy dwa wątki 000002c4 oraz 000001b9 (działające jeden po drugim - zobaczmy czasy logowania zdarzeń) realizujące akcję uwierzytelniania, z których jeden kończy się błędem.
Po żmudnej analizie znalazłem przyczynę. Problem tkwi w modyfikacji zabezpieczeń w przeglądarkach Chrome i Edge dla ustawianych cookies - chodzi o dodatkowy atrybut SameSite. Opis polityki związanej z tym atrybutem znajdziemy na stronach projektu Chromium: https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies .
WebSphere (wersja 8.5.5.16), ani aplikacja produktu IBM BPM, nie wspierają tego dodatkowego atrybutu dla cookies sesyjnych i nie ustawiają go. Okazuje się też, że domyślnie, obydwie przeglądarki ignorują takie cookies. Po stronie przeglądarek obserwujemy, że podczas pierwszego żądania serwer aplikacji uwierzytelnił i w odpowiedzi oczekuje ustawienia ciasteczek LtpaToken2, isBidi, BPMSSID oraz Teamworks po stronie przeglądarki:
Niestety podczas kolejnego żądania ciasteczka nie są przesyłane i obserwujemy ponowne uwierzytelnianie, ze mienionym identyfikatorem sesji BPMSSID:
Dlatego też pojawia się błąd.
Na razie rozwiązaniem jest zmiana parametrów przeglądarek.
Chrome
Otwieramy przeglądarkę Chrome i wykonujemy następujące kroki:
- Wprowadzamy jako adres przeglądania: chrome://flags
- Wyszukujemy słowa kluczowego "samesite". Znalezione parametry ustawiamy na "Disabled" i przeładowujemy przeglądarkę (przycisk "Relaunch")
- Od tego czasu wszystko działa OK
Edge
Przeglądarki Chrome i Edge wywodzą się z tego samego projektu, więc postępujemy analogicznie:
- Wprowadzamy jako adres przeglądania: edge://flags
- Wyszukujemy słowa kluczowego samesite. Znalezione parametry ustawiamy na "Disabled" i przeładowujemy przeglądarkę (przycisk "Uruchom ponownie")
- Od tego czasu wszystko działa OK
WebSphere
Jeszcze nie wiem jak postąpić z WebSphere by ten atrybut dodawał, ale bez wgrania poprawek się nie obejdzie.
Artykuły które znalazłem:
https://www.ibm.com/support/pages/browser-changes-samesite-cookie-handling-and-websphere-application-server
https://www.ibm.com/support/pages/ph20912-unable-set-samesite-cookie-option-responseaddheader