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. Coraz częściej wiele firm stawia właśnie na gotowe rozwiązanie typu SSO (Single Sign-On) aby zaoszczędzić czas i pieniądze na implementacją własnego rozwiązania czy 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. Posiada również konsolę administracyjną, w której możemy łatwo skonfigurować chociażby uprawnienia użytkowników.

Co to oznacza w praktyce? Przy pomocy Keycloaka możemy w prosty sposób zabezpieczyć naszą aplikację dodając do niej logowanie, umożliwić zarządzanie uprawnieniami i użytkownikami z poziomu konsoli Keycloaka, czy chociażby zabezpieczyć nasze API.

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

Instalacja Keycloaka

W oficjalnej dokumentacji Keycloaka jest opisany sposób instalacji ze źródeł. My jednak zainstalujemy go w sposób prostszy. Potrzebujemy do tego zainstalowanego Docker Compose. W przypadku Windowsa jest on już zawarty w Docker Desktop. W innych wypadkach odsyłam do oficjalnej dokumentacji.

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 🙂

Uruchomienie go:

docker-compose -f dockerfile.yml up -d  

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

Jeśli wszystko poszło dobrze po wpisaniu w przeglądarce localhost:8080 powinnismy ujrzeć stronę główną Keycloak’a:

A po wykonaniu komendy:

docker ps

Będziemy widzieć 2 nasze kontenery:

Jak jest zbudowany Keycloak?

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

Najlepiej budowę Keycloaka przedstawia poniższy rysunek:

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.

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

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 zakładce tworzymy nasze role, aby później przypisać do niej użytkowników.

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 rozpczenimy od użytkowników a następnie zobaczymy jak zintegrować 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 🙂