Настройка Keycloak
Настройка на версии keycloak >= 19.X.X
-
Заходим консоль администрирования keycloak. Выбираем существующий или создаём новый realm.
-
Необходимо создать нового клиента. Переходим в Clients, в открывшимся окне нажимаем create и создаем нового Client ID с именем zakroma В новом окне настройки меняем: -
Client authentication: On
-Authorization: On
-
Настраиваем сервисный аккаунт Clients -> Zakroma -> Service Account Roles. Нажать
Assign role
-> Выбратьadmin
->Assign
-
Настраиваем маппинг для пользователей Clients -> Zakroma -> Сlient Scopes -> zakroma-dedicated . Add mapper -> By configuraton -> User Attribute. -
Mapper Type: User Attribute
-Name: username-mapper
-User Attribute: username
-Token Claim Name: username
-Claim JSON Type: String
-Add to access token: ON
-
Realm Settings -> Keys
копируем kid и pyblic_key ключа с алгоритмом RS256 в настройки установки zakroma. -
Clients -> zakroma -> Credentials
копируем clientSecret в настройки установки zakroma. -
Увеличим время жизни токена. Переходим на вкладки слева
Realm Settings -> Tokens
. Проставим следующее значение:Access Token Lifespan: 10 minute
-
Настройка реестра пользователей
Для тестов без LDAPДля тестового использования возможно использовать внутренний реестр пользователей keycloak, без интеграции с ldap.
Используется при хранении пользователей в LDAP-репозитории
На вкладке User Federation -> Add new provider -> ldap
Далее заполняем значения (на примере OpenLdap):
1- `Vendor: other #other если используется OpenLdap и Active Directory если Active Directory` 2- `Connection URL: ldap://openldap.openldap.svc.cluster.local:389` 3- `Bind Type: simple` 4- `Bind DN: cn=admin,dc=demo,dc=zakroma,dc=ru` 5- `Bind Credential: xxx` 6- `Edit Mode: UNSYNCED` 7- `Users DN: ou=users,dc=demo,dc=zakroma,dc=ru` 8- `Username LDAP attribute: cn` 9- `RDN LDAP attribute: cn` 10- `UUID LDAP attribute: cn` 11- `User Object Classes: person, organizationalPerson`
и нажимаем Save.
Далее создаём маппер из Ldap в Keycloak: Mappers -> Add mapper
Создаем mapper c именем role-mapper c типом role-ldap-mapper
.
Общая суть сводится к синхронизации групп AD с ролями пользователей в keycloak. Пример настроек:
- LDAP Roles DN: ou=groups,dc=demo,dc=zakroma,dc=ru
- Role Name LDAP Attribute: cn
- Role Object Classes: groupOfUniqueNames
- Membership LDAP Attribute: uniqueMember
- Membership Attribute Type: DN
- Membership User LDAP Attribute: uid
- Mode: LDAP_ONLY
- User Role Retrieve Strategy: LOAD_ROLES_BY_MEMBER_ATTRIBUTE
- Member-Of LDAP Attribute: memberOf
- ClientID: zakroma
Создаём ещё один mapper c именем username-mapper c типом user-attribute-ldap-mapper
:
1- `User Model Attribute: username` 2- `LDAP Attribute: uid`
Синхронизируем пользователей.
Возвращаемся к настройкам на вкладке User Federation -> ldap -> settings
и жмем на синхронизацию всех пользователей, тут должны увидеть что пользователи были добавлены.
В необходимых настройках Zakroma необходимо выставить значение свойства userRoleName в то название роли, в которая присутствует у всех нужных пользователей. Т.е. только пользователи с данной ролью смогут пользоваться системой Zakroma.
Используется для тестирования, либо нестандартной конфигурации
Создаём роли: Clients -> Zakroma -> Roles
По кнопке Create role
добавить роль:
- clouduser
Создаём пользователей в Keycloak: Users -> Add user
1Username: zakromaadmin 2First name: Admin 3Last name: Zakroma
Задаём пароль: Users -> zakromaadmin -> Credentials -> Set password
- Temporary: off
Назначаем роль: User -> zakromaadmin -> Role mapping -> Assign Role
Переключить в режим Filter by Clients -> в поиске написать “zakroma”
- clouduser