Websphere-oidrcp-adapter (Luna)
Twoja organizacja posiada biznesowe repozytorium kont pracowników w Exchange Online MS Office 365. Chcesz by użytkownicy Twoich aplikacji webowych logowali się korzystając z poświadczeń biznesowych kont MS Office 365, chcesz w swoich aplikacjach korzystać z jednego punktu logowania (Single Sign-On, SSO) jaki daje MS Office 365, zatem implementacja biblioteki Websphere-oidrcp-adapter (Luna) jest IDEALNYM rozwiązaniem Twoich potrzeb.
Celem jest uruchomienie w lokalnej aplikacji webowej Twojej firmy (organizacji) mechanizmu Single Sign-On (SSO, pojedyncze logowanie) z MS Office 365. Założeniem jest, że aplikacja webowa zainstalowana jest na serwerze aplikacji IBM WebSphere Application Server. Przykładem wdrożenia rozwiązania jest strona logowania https://bpm.umed.pl/.
Luna to dostosowana implementacja klasy com.ibm.ws.security.oidc.client.RelyingParty
.
Jeżeli masz lokalne repozytorium użytkowników LDAP oraz nazwy użytkowników są inne niż w MS Office 365, to wprowadzone rozwiązania pozwolą Ci na MAPOWANIE odpowiednich atrybutów entry z nazwami użytkowników, które zwracane są przez mechanizm OpenId Connect na atrybuty z nazwami użytkowników składowane w lokalnym repozytorium LDAP. Mechanizm wykorzystuje konfigurację LDAP definiowaną w mechanizmach sfederowanych repozytoriów użytkowników
WIM (Websphere Identity Manager, Federated repositories with WebSphere® Application Server).
Skrót OIDCRP oznacza WebSphere OpenID Connect Relying Party.
Działanie metody negocjacji
Założeniem jest, że lokalna aplikacja webowa korzysta z mechanizmów uwierzytelniania opartych o lokalne repozytorium LDAP/AD.
Implementacja realizuje następujące kroki działania:
- Uruchomienie oryginalnej metody z klasy nadrzędnej.
- Przeprowadzenie wyszukiwania użytkownika w repozytoriach LDAP na podstawie zwróconej przez mechanizm oryginalny nazwy.
- Na podstawie danych znalezionego w LDAP entry ustawia nową nazwę użytkownika.
- Logujemy się do MS Office 365 użytkownikiem o nazwie
scichy@<nazwa_domeny>
. - Taka nazwa użytkownika jest przechowywana w loklanym repozytorium LDAP/AD w atrybucie o nazwie
mail
. Mechanizm wyszukuje użytkownika w lokalnym repozytorium używając kryteriów filtra(mail=scichy@<nazwa_domeny>)
. - Docelowa nazwa użytkownika w lokalnej aplikacji przechowywana jest w loklanym repozytorium LDAP/AD w atrybucie o nazwie
uid
. Dla wyszukiwanego użytkownika atrybut ten przymuje wartośćslawas
. Zatem użytkownik zostanie zalogowany do aplikacji jakoslawas
.
Uruchomienie mechanizmu pozwala na jednoczesne korzystanie z metody uwierzytelniania SSO MS Office 365 jak i dotychczas stosowanej w aplikacji metody opartej o lokalne repozytorium LDAP/AD, czyli nadal można używać metod logowania 'BASIC', 'FORM' opartych o nazwę i hasło pochodzące z lokalnego repozytorium użytkowników. To pozwala na dostęp do aplikacji dla tych użytkowników, którzy nie posiadają konta w MS Office 365.
Instalacja
Pakiet instalacyjny to archiwum zawierające plik o nazwie websphere-oidcrp-adapter-<version>.jar
(np. websphere-oidcrp-adapter-9.0.8.jar
). Plik ten należy umieścić w katalogu $WAS_INSTALL/lib/ext
np. /opt/IBM/BAW/20.0.0.1/lib/ext
.
Konfiguracja pamięci podręcznych
Pamiętaj o skonfigurowaniu pamięci podręcznych.
Ścieżka konfiguracji w konsoli WebSphere: Resources > Cache instances > Object cache instances
Potem ustaw odpowiednio wartości parametry:
- jndiCacheName - nazwa JNDI pamięci podręcznej, w której przechowywane będą dane sesji użytkownika.
- namesMap.jndiCacheName - nazwa JNDI pamięci podręcznej, w której przechowywane będą dane związane z mapowaniem oryginalnej jego nazwy do nazwy lokalnej.
Przykładowa konfiguracja interceptora
Ścieżka konfiguracji w konsoli WebSphere: Global security > (Web and SIP security) > Trust association > Interceptors
Dodajemy interceptor pl.slawas.ws.security.oidc.client.RelyingParty.
Warto odwiedzić następujące strony:
- Adding an application in Azure AD for SSO with Connections
- Updating WebSphere to support Azure AD OIDC authentication for Connections
- Configuring an OpenID Connect Relying Party
- OpenID Connect Relying Party custom properties
- CWTAI2009I: The OpenID Connect relying party (RP) did not find an entry for session cookie OIDCSESSION_12345678 in the Session cache.
Poniżej zrzut ekranu z konsoli WebSphere z przykładową konfiguracją:
W konfiguracji dostępne są dodatkowe parametry:
- ldapRepository.names - lista nazw sfederowanych repozytoriów LDAP zdefiniowanych w konfiguracji WebSphere, które mają być wykorzystanie do wyszukania entry użytkownika. Nazwy odseparowane są znakiem przecinka.
- ldapRepository.%s.oidrcpAttribute - parametr definiujący nazwę atrybutu użytkownika, która reprezentuje nazwę/login użytkownika zwracany przez zewnętrzny system OpenID Connect. Podstawa mapowania. Na podstawie tego atrybutu i jego wartości użytkownik będzie wyszukany. W konfiguracji RP argument '%s' jest zastąpiony nazwą repozytorium LDAP i dotyczy danego repozytorium. Przykład: ldapRepository.BPMPRO.oidrcpAttribute - gdzie BPMPRO to nazwa repozytorium LDAP.
- ldapRepository.%s.localAttribute - parametr definiujący nazwę atrybutu użytkownika, która reprezentuje nazwę/login użytkownika zwracany przez LDAP. Podstawa mapowania. Na podstawie tego atrybutu i jego wartości będzie nadana nazwa zalogowanego użytkownika. W konfiguracji RP argument '%s' jest zastąpiony nazwą repozytorium LDAP i dotyczy danego repozytorium. Przykład: ldapRepository.BPMPRO.localAttribute - gdzie BPMPRO to nazwa repozytorium LDAP.
- redirectLoginPage - parametr opcjonalny - dodatkowy parametr w konfiguracji mechanizmu RP pozwalający na przekierowanie żądania do określonej strony po wystąpieniu błędu w danej implementacji metody negocjacji.
- namesMap.jndiCacheName - parametr opcjonalny, nazwa JNDI pamięci podręcznej, w której przechowywane będą dane związane z mapowaniem oryginalnej jego nazwy do nazwy lokalnej. Nie ustawiaj, jeżeli chcesz skorzystać z lokalnej pamięci podręcznej. Jeżeli jednak chcesz skorzystać z dynamicznej pamięci podręcznej pamiętaj by ją wcześniej zdefiniować!
- namesMap.maxLocalCacheSize - parametr opcjonalny, rozmiar (liczba entry) lokalnej pamięci podręcznej, wykorzystywany podczas definicji lokalnej pamięci podręcznej mapy nazw użytkowników. Jeżeli nie ustawisz to będzie wykorzystana domyślna wartość 2000.
- namesMap.sessionCacheCleanupFrequency - parametr opcjonalny, czas życia entry (wpisu) w lokalnej pamięci podręcznej (w sekundach), wykorzystywany podczas definicji lokalnej pamięci podręcznej mapy nazw użytkowników. Jeżeli nie ustawisz to będzie wykorzystana domyślna wartość 1800.
- chcekUserNameByLtpaTokenURL - parametr opcjonalny, URL do strony zwracającej nazwę użytkownika, w przypadku gdy jest on już zalogowany inną metodą. Strona taka została zaimplementowana w przykładowej aplikacji https://github.com/SciSoftwareSlawomirCichy/defaultapplication, którą należy wcześniej zainstalować. Przykładowy URL:
https://localhost:9443/default/pages/index.jsp
.
Global security - dodatkowe parametry
Ścieżka konfiguracji w konsoli WebSphere: Global security > Custom properties
Ustaw parametry globalne:
com.ibm.websphere.security.DeferTAItoSSO
=com.ibm.ws.security.spnego.TrustAssociationInterceptorImpl
com.ibm.websphere.security.InvokeTAIbeforeSSO
=pl.slawas.websphere.oidrcp.client.RelyingParty
com.ibm.websphere.security.disableGetTokenFromMBean
=false
Ustawianie mechanizmu wylogowania w IBM BAW/BPM
Trzeba ustawić mechanizm wylogowania na ścieżkę https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=<URL_IBM_BPM_PORTAL>&client_id=<CLIENT_ID>
np. https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=https%3A%2F%2Fbpmbaw20test.hgdb.org%3A9443%2FProcessPortal%2F&client_id=20eacb3e-0029-404a-a335-9dd7ef5ce194
.
Aby tego dokonać wykonaj następujące polecenia:
./wsadmin.sh -conntype NONE -lang jython
path='/ServerCluster:SingleCluster/BPMClusterConfigExtension:/BPMPortal:/'
object=AdminConfig.getid(path)
clp='customLogoutPage'
print AdminConfig.showAttribute(object,clp)
AdminConfig.modify(object,[[clp,'https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=https%3A%2F%2Fbpmbaw20test.hgdb.org%3A9443%2FProcessPortal%2F&client_id=20eacb3e-0029-404a-a335-9dd7ef5ce194']])
print AdminConfig.showAttribute(object,clp)
AdminConfig.save()
Źródło: Configuring third-party authentication products
Wsparcie
W razie problemów proszę o kontakt mailowy na adres e-mail info@scisoftware.pl. W temacie wiadomości proszę o dołączenie prefixu: [Websphere-oidrcp-adapter].