Blog

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:

  1. Wprowadzamy jako adres przeglądania: chrome://flags
  2. Wyszukujemy słowa kluczowego "samesite". Znalezione parametry ustawiamy na "Disabled" i przeładowujemy przeglądarkę (przycisk "Relaunch")
  3. Od tego czasu wszystko działa OK

Edge

Przeglądarki Chrome i Edge wywodzą się z tego samego projektu, więc postępujemy analogicznie:

  1. Wprowadzamy jako adres przeglądania: edge://flags
  2. Wyszukujemy słowa kluczowego samesite. Znalezione parametry ustawiamy na "Disabled" i przeładowujemy przeglądarkę (przycisk "Uruchom ponownie")
  3. 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