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 wpisie. Nastę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"
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.
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