Keycloak – wstęp do łatwego zarządzania użytkownikami

W ostatnim czasie dość często mówi się o narzędziu Open Source jakim jest Keycloak. Przede wszystkim dlatego, że wiele firm stawia na gotowe rozwiązanie typu SSO (Single-Sign-On). Pozwala im to zaoszczędzić i czas, i pieniądze na implementację własnego czy też zakup gotowego rozwiązania.

Czym jest Keycloak?

Keycloak to serwer uwierzytelniania i autoryzacji na licencji open-source. Może zostać podłączony do LDAP/AD lub uwierzytelniać użytkowników przy użyciu Google, Facebooka, LinkedIna, Microsoftu itd. Dzięki konsoli administracyjnej uprawnienia użytkowników są łatwe do skonfigurowania.

Co to oznacza w praktyce? Przy pomocy tego narzędzia możemy w prosty sposób zabezpieczyć naszą aplikację dodając do niej logowanie. Dodatkowo, z poziomu jego konsoli, możemy zarządzać uprawnieniami i użytkownikami, czy choćby zabezpieczyć nasze API.

W dzisiejszym wpisie chciałbym opisać samą budowę Keycloaka oraz jego instalację. W kolejnych opiszę w jaki sposób zintegrować go z aplikacją Angularową i Spring Boot’ową, tak aby w pełni wykorzystać jego możliwości.

Instalacja

W oficjalnej dokumentacji Keycloaka jest opisany sposób instalacji ze źródeł. My jednak zainstalujemy go w sposób prostszy.

Po pierwsze, potrzebujemy do tego zainstalowanego Docker Compose. W przypadku Windowsa jest on już zawarty w Docker Desktop. W innych wypadkach odsyłam do oficjalnej dokumentacji.

Po drugie, tworzymy nasz dockercompose.yml:

version: '3'

volumes:
postgres_data:
driver: local

services:
postgres:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
keycloak:
image: jboss/keycloak:12.0.3
environment:
DB_VENDOR: POSTGRES
DB_ADDR: postgres
DB_DATABASE: keycloak
DB_USER: keycloak
DB_SCHEMA: public
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
ports:
- 8080:8080
depends_on:
- postgres

Zapisujemy go, zapamiętując gdzie – ścieżka do niego będzie nam później potrzebna 🙂

Najważniejsze elementy naszego pliku to:

  • KEYCLOAK_USER – czyli nazwa użytkownika administracyjnego Keycloaka;
  • KEYCLOAK_PASSWORD – hasło tego użytkownika;
  • ports – na jakim porcie będzie uruchomiona usługa (8080).

O pozostałych elementach i samym Docker Compose napisze oddzielny wpis w przyszłości 🙂

Po trzecie, uruchamiamy go:

docker-compose -f dockerfile.yml up -d  

jeśli w konsoli nie jesteśmy w lokalizacji naszego pliku, trzeba pamiętać o tym aby podać do niego ścieżkę.

Jeśli wszystko poszło dobrze, po wpisaniu w przeglądarce localhost:8080 powinniśmy ujrzeć stronę główną Keycloaka:

Keycloak_strona_główna
Strona główna keycloaka

Po czwarte, wykonujemy komendę:

docker ps

Teraz będziemy widzieć 2 nasze kontenery:

Jak jest zbudowany Keycloak?

Mamy już zasintalowanegko Keycloaka – pytanie jak on jest zbudowany?

Najlepiej jego budowę przedstawia poniższy rysunek:

Keycloak - jak jest zbudowany?
Budowa keycloaka

Najważniejszym elementem Keycloaka są Realm’y. Realm zarządza zbiorem użytkowników, ról i grup. Każdy użytkownik należy do Realm’a i loguje się do niego. Instancja Keycloaka może mieć wiele Realm’ów – każdy z nich jest odizolowany.

Pod każdym Realm’em możemy tworzyć Client’ów. Klienci najczęściej odwzorowują aplikacje i usługi, które korzystają z uwierzytelniania poprzez Keycloaka.

keycloak clients

Na poziomie Client’a możemy ustawić takie właściwości jak Protokół Dostępu, Typ dostępu czy chociażby wyłączyć danego Client’a.

keycloak_client_acount

Kolejnym istotnym elementem Keycloaka są role. Wyobraźmy sobie aplikację, w której mamy zwykłych użytkowników i administratorów. To właśnie w tej właśnie zakładce tworzymy nasze role, a następnie przypisujemy do nich użytkowników.

keycloak_roles

Jeśli chcemy, aby w naszej aplikacji była możliwość logowania się poprzez konto Google’a, musimy przejść do zakładki Identity Provider. To w niej możemy skonfigurować naszego dostawcę tożsamości.

W dzisiejszym wpisie to tyle. Kolejny wpis rozpoczenimy od kwestii związanych z użytkownikami. Jaki będzie kolejny krok? Zintegrujemy Keycloak’a z backendem aplikacji napisanym w Spring Boot.

Jak zawsze przypominam o naszej grupie na Facebooku – można w niej zapytać dosłownie o wszystko a ktoś napewno udzieli odpowiedzi 🙂