Przeskocz do opisu głównego

IBM BPM - problem utrzymania sesji w przeglądarkach Chrome i Edge

· 4 minut czytania
Sławomir Cichy
Backend Engineer @ Sci Software

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:

image2020-11-26_18-41-55

Niestety podczas kolejnego żądania ciasteczka nie są przesyłane i obserwujemy ponowne uwierzytelnianie, ze zmienionym identyfikatorem sesji BPMSSID:

image2020-11-26_18-46-16

Dlatego też pojawia się błąd.

Na razie rozwiązaniem jest zmiana parametrów przeglądarek.

Google Chrome

  • Wersja Chrome: 87.0.4280.66

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

image2020-11-26_18-53-22

Microsoft Edge

  • Wersja Edge: 86.0.622.69

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

image2020-11-26_18-56-32

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: