Przeskocz do opisu głównego

Websphere-oidrcp-adapter (Luna)

Single Sign-On z MS Office 365

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/.

login_to_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:

  1. Uruchomienie oryginalnej metody z klasy nadrzędnej.
  2. Przeprowadzenie wyszukiwania użytkownika w repozytoriach LDAP na podstawie zwróconej przez mechanizm oryginalny nazwy.
  3. Na podstawie danych znalezionego w LDAP entry ustawia nową nazwę użytkownika.
Przykład
  1. Logujemy się do MS Office 365 użytkownikiem o nazwie scichy@<nazwa_domeny>.
  2. 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>).
  3. 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 jako slawas.
info

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

Wskazówka

Pamiętaj o skonfigurowaniu pamięci podręcznych.

Ścieżka konfiguracji w konsoli WebSphere: Resources > Cache instances > Object cache instances

websphere_sample_config_screen01

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:

Poniżej zrzut ekranu z konsoli WebSphere z przykładową konfiguracją:

websphere_sample_config_screen02

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].

Firmy, które już użyły produktu

certificate

certificate