Poprzedni wpis dotyczący Keycloaka zakończyliśmy na jego budowie. Skoro już znamy budowę Keycloaka, wiemy jak go zainstalować pora na integrację z backendem naszej aplikacji. Słowo „Prosta” oznaczania najprostsza formę integracji Keycloaka ze Springiem, zaawansowana pojawi się niebawem.

Pierwszą rzeczą jaką musimy zrobić to przygotować serwer Keycloak, korzystając z docker-compose który znajdziemy na poprzednim wpisieNastępnie wchodzimy na stronę  http://localhost:8080/auth/admin/ logując się wcześniej ustawionymi danymi poprzez zmienne środowiskowe.

Fragment docker-compose.yml:

environment:
  - "KEYCLOAK_USER=admin"
  - "KEYCLOAK_PASSWORD=admin" 
Gdy udało się nam zalogować do panelu administratora, powinny się nam ukazać ustawienia realmu Master. W komercjnym świecie musimy stworzyć własny realm, gdyż master jest domyślnym, zawierający szereg administracjnych rzeczy.
Klikamy w lewym górnym rogu na Master, a następnie Add realm

Wpisujemy dowlona nazwe reprezentująca zbiór naszych aplikacji (nazwe projektu)

Oczywiśnie możemy importować konfiguracje z już istniejącego realmu i na bazie niego tworzyc. Klikamy Create

Poprawne stworzenie realma powinno sie zakończyć stroną administracjna jego

Kolejną rzeczą jest dodanie obiektu client, który reprezentuje naszą aplikacje (webowa, mobilna itd), w tym celu musimy przejść do zakładki Clients.

Nastepnie w prawym rogu, klikamy create i wpisujemy nazwe naszej aplikacji.

zostawiamy client-protocol „openid-connect” i klimamy save . Po poprawnym stworzeniu pojawi się na strona administracjna tego klienta


Ustawiamy Access Type na Confidential co daje nam to ze aby appka springowa mogła korzystać z tego clienta musi posiadać specjany secret. 

Service Accounts Enabled na ON co pozwala appce springowej na pobranie access tokenu dla swoich celów.

Authorization Enabled na ON co pozwala na uzywanie przez aplikacje Policy Decision Point keycloaka, czyli definiowanie polityk i uprawnien i ich przetwarzanie.

Zapisujemy ustawienia i przechodzimy do zakładki Credentials, kopjujemy Secret gdyż go ustawimy w aplikacji Springowej.

Kolejnym krokiem będzie utworzenie ról, definiujących posiadanie danych funkcjonalności tzn dostępów do konkretnych endpointów.Na potrzeby bloga stworze 2 role admin i user.

Przechodzimy do sekcji Roles we wcześniej zdefiniowanym kliencie -> Add Role i dodajemy Role

Następnie tworzymy role globalne w stworzonym realmie. Da nam to tą własność że będziemy mogli przypisać jedna role do usera, która będzie się różnie zachowywać w zależności od klienta – Rola globalna jakby agreguje specyficzne role klientów (aplikacji)

Teraz jak już wcześniej wspomniałem wiążemy 2 globalne role z rola danego klienta(aplikacji)

Globalna  rola Spring-app-test-admin -> lokalna rola klienta – admin, Globalna  rola Spring-app-test-user-> user. Tworzymy 2 uzytkownikow testowych (user-test,user-admin) i ustawiamy im hasla