zabezpieczanie aplikacji przy pomocy keycloak

Zabezpieczanie aplikacji wdrożonych na serwerze aplikacji przy pomocy KeyCloak

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.

 

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

create_admin

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

user_create

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

user_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”.

niechronionoa_aplikacja

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

realm_create

realm_ready

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.

klient_tworzenie

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.

klient_pobieranie_konfiguracji

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.

login_redirect

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.

login_change_pass

Gdy logowanie przebiegnie poprawnie, naszym oczom ukaże się informacja, że zalogowaliśmy się poprawienie.

login_correct

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.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.