Dziś pokażemy krok po kroku, jak korzystając z KeyCloak, możemy w łatwy sposób zabezpieczyć naszą aplikację wdrożoną na serwerze aplikacji EuroAP lub pokrewnym. Zainstalujemy narzędzie KeyCloak oraz jego adapter na EuroAP. Następnie skonfigurujemy zabezpieczenie przykładowej aplikacji.
KeyCloak to otwartoźródłowe narzędzie do zarządzania tożsamością i dostępem. Umożliwia między innymi: pojedyncze logowanie (ang. single sign-on), scentralizowane zarządzanie czy dwuetapowe uwierzytelnienie oraz zawiera integrację z LDAP-em i Kerberosem. Składa się z dwóch kluczowych elementów — serwera i adapterów. Dodatkowo jest lekki i prosty w obsłudze.
Instalacja KeyCloak
Na początek pobierzmy najnowszą wersję KeyCloak ze strony https://www.keycloak.org/downloads. W zakładce „Downloads” pod nagłówkiem „Server” pobieramy zip „KeyCloak – distribution powered by Wildfly”. Następnie rozpakowujemy i uruchamiamy KeyCloak z przesunięciem portów o 100, aby jego porty nie interferowały z portami EuroAP. Polecenia KeyClaok wyglądają niezwykle znajomo, ponieważ jest on oparty o Wildfly (rodzina EuroAP).
unzip keycloak-12.0.0.zip
cd keycloak-12.0.0/bin/
./standalone.sh -Djboss.socket.binding.port-offset=100
KeyCloak nie ma domyślnego użytkownika – administratora. Dlatego też przy pierwszym uruchomieniu należy go utworzyć otwierając http://localhost:8180/auth/ (bez przesunięcia portów byłoby to: http://localhost:8080/auth/) i wypełnić formularz „Administration Console”.
Tworzenie użytkownika aplikacji w KeyCloak
Utwórzmy użytkownika, za pomocą którego będziemy się uwierzytelniać w aplikacjach. W tym celu z menu głównego przechodzimy do zakładki „Users” i klikamy „Add user”.
Tworzymy użytkownika, podając tylko jego nazwę i klikamy przycisk „Save”. KeyCloak przeniesie nas do widoku nowo utworzonego użytkownika. Następnie przechodzimy do zakładki „Credentials” i tam ustawiamy hasło. Potwierdzamy, klikając „Set password”.
Instalacja adaptera w serwerze aplikacji
Ze strony KeyCloak pobieramy adapter dla JBoss® EAP, ponieważ EuroAP i JBoss® EAP są równoważne. W zakładce „Downloads” pod nagłówkiem „Client Adapters” w linijce „JBoss EAP” pobieramy zip ze stosowną wersją (EuroAP i JBoss® EAP są wersjonowane tak samo). Zip zawiera moduł adaptera oraz skrypt dla CLI konfigurujący podsystem adaptera.
Po pobraniu rozpakowujemy plik w folderze „EUROAP_HOME” (folderze, który tworzy się po rozpakowaniu archiwum EuroAP). Następnie uruchamiamy skrypt CLI do konfiguracji podsystemu adaptera, a potem serwer aplikacji w trybie standalone.
cp keycloak-oidc-wildfly-adapter-12.0.1.zip EuroAP-7.3
cd EuroAP-7.3/
unzip keycloak-oidc-wildfly-adapter-12.0.1.zip
cd bin/
./jboss-cli.sh --file=adapter-install-offline.cli
./standalone.sh
Zabezpieczanie przykładowej aplikacji
Projekt KeyCloak udostępnia zbiór przykładowych projektów, które pozwalają szybko wypróbować jego możliwości. Wykorzystamy zatem jedną z nich – „app-profile-jee-vanilla: JSP Profile Application”. Wdrożymy tę aplikację na serwer aplikacji. W KeyCloak stworzymy i zarejestrujemy dla niej klienta, a następnie skonfigurujemy podsystem serwera aplikacji. Po tych czynnościach będziemy mogli cieszyć się zabezpieczoną aplikacją. Zatem do dzieła:
Pobierzmy przykłady i zbudujmy interesujący nas projekt.
git clone https://github.com/keycloak/keycloak-quickstarts.git
cd keycloak-quickstarts/app-profile-jee-vanilla/
Zbudujmy i wdróżmy projekt na serwer aplikacji.
mvn clean wildfly:deploy
Aplikacja jest dostępna pod adresem http://localhost:8080/vanilla i chociaż po naciśnięciu przycisku „Login” pojawia się nam okienko do logowania, to na razie nie jest ona chroniona przez żadnego dostawcę tożsamości. Dlatego każda próba logowania zakończy się informacją zwrotną „Unauthorized” – „nieupoważniony/a”.
Konfiguracja klienta w KeyCloak
Utwórzmy teraz realm „Demo”, a w nim klienta dla naszej aplikacji – „demo Client”.
Aby utworzyć nowy realm (w języku polskim „obszar” albo „królestwo”):
- należy zalogować się do KeyCloak
- w lewym górnym rogu pojawi się menu, a nad nim rozwijalna lista, która na początku składa się tylko z jednego elementu – „Master”. Po najechaniu kursorem myszy na „Mastser” rozwija się lista z przyciskiem „Add realm”, który wciskamy
- w formularzu „Add realm” wpisujemy nazwę „Demo” i klikamy „Create”.
Aby utworzyć klienta, klikamy zakładkę „Clients”, następnie przycisk „Create”, który pojawił się po prawej stronie. Uzupełniamy formularz: w ClientID wpisujemy „ClientDemo”, a w Root URL url, na którym nasłuchuje nasza przykładowa aplikacja – „http://localhost:8080/vanilla”. Zapisujemy.
KeyCloak przeniesie nas do widoku nowo utworzonego klienta. Przechodzimy więc do zakładki „Installation” i tam pobieramy konfigurację klienta adaptera. Mamy do wyboru 3 formaty. Dwa z nich są dedykowane dla serwerów aplikacji z rodziny EuroAP:
- Keycloak OIDC JBoss Subsystem XML – gdy pobieramy konfigurację w tym formacie, przeklejamy ją do plików XML. Wadą tego rozwiązania jest to, że działamy bezpośrednio na plikach konfiguracyjnych, co nie jest dobrą praktyką. Jednak jeżeli ktoś się na nie zdecyduje, to należy: skopiować tekst, który zaserwował nam KeyCloak, wkleić go w EUROAP_HOME/standalone/configuration/standalone.xml do konfiguracji podsystemu „keycloak”, a następnie podmienić nazwę „WAR MODULE NAME” na nazwę wara z docelową aplikacją
- Keycloak OIDC JBoss Subsystem CLI – tę konfigurację wykonujemy w CLI serwera aplikacji. Konfigurowanie przez CLI daje nam większą kontrolę nad wprowadzanymi zmianami. Nie zapiszemy bowiem przez przypadek konfiguracji. Właśnie ten sposób rekomendujemy i pokażemy poniżej.
Pobieramy konfigurację w formacie Keycloak OIDC JBoss Subsystem CLI. Będzie nam potrzebna do konfiguracji podsystemu serwera aplikacji EuroAP.
Konfiguracja podsystemu w serwerze aplikacji EuroAP
Mamy już konfigurację klienta. Potrzebujemy się jeszcze dowiedzieć, jak nazwany jest war, przy pomocy którego została wdrożona aplikacja. W tym celu:
- otwieramy CLI (będąc w katalogu EUROAP_HOME/bin)
- sprawdzamy wdrożone aplikacje za pomocą komendy
deployment-info
. Zauważmy, że wdrożona aplikacja w serwerze aplikacji ma nazwę „vanilla.war” - podmieniamy nazwę w pobranej z KeyCloak konfiguracji:
/subsystem=keycloak/secure-deployment="WAR MODULE NAME.war"/:add( \
realm="Demo", \
resource="demoClient", \
auth-server-url=http://127.0.0.1:8180/auth/, \
public-client=true, \
ssl-required=EXTERNAL)
na
/subsystem=keycloak/secure-deployment="vanilla.war"/:add( \
realm="Demo", \
resource="demoClient", \
auth-server-url=http://127.0.0.1:8180/auth/, \
public-client=true, \
ssl-required=EXTERNAL)
Następnie przeładowujemy konfigurację za pomocą polecenia reload
.
./jboss-cli.sh --connect
[standalone@localhost:9990 /] deployment-info
NAME RUNTIME-NAME PERSISTENT ENABLED STATUS
vanilla.war vanilla.war true true OK
[standalone@localhost:9990 /] /subsystem=keycloak/secure-deployment="vanilla.war"/:add( realm="Demo", resource="demoClient", auth-server-url=http://127.0.0.1:8180/auth/, public-client=true, ssl-required=EXTERNAL)
[standalone@localhost:9990 /] reload
Zabezpieczona aplikacja
Sprawdźmy rezultaty w aplikacji. W tym celu wróćmy do ekranu głównego i kliknijmy przycisk „login”. Zamiast wyskakującego okienka do logowania „Basic” przenosi nas do logowania w KeyCloak.
Wpisujemy dane utworzonego wcześniej użytkownika. W naszym przykładzie po prostu „test”. Jeśli tworząc hasło dla użytkownika nie odkliknęliśmy opcji „Temporary”, zostaniemy poproszeni o zmianę hasła.
Gdy logowanie przebiegnie poprawnie, naszym oczom ukaże się informacja, że zalogowaliśmy się poprawienie.
Podsumowanie
Pokazaliśmy dziś, jak skonfigurować zabezpieczenie aplikacji na EuroAP i pokrewnych serwerach aplikacji. Jest to prosty przykład i proste uwierzytelnienie. Jedak po stronie samej aplikacji i serwera aplikacji nie będzie już konieczności zmieniania praktycznie niczego, a integracja z KeyCloak otwiera przed nami całe spektrum możliwości autoryzacji i uwierzytelnienia.