Данная страница помогает пользователям выполнить обновление их установок (подключённых к Keycloak 11.0.3 или более ранним версиям) до версии Keycloak 18+.
Начиная с версии Keycloak 12+, Keycloak больше не инициализирует клиентские области по умолчанию (default client scopes) для стандартных клиентов при импорте realm. Это вызывает ошибку Forbidden при входе пользователей в their account console. Чтобы обойти эту проблему, последние LDAP-образы от dcm4chee содержат скрипты для инициализации и добавления разрешений account пользователям по умолчанию, а также любым другим пользователям, добавленным ранее в Keycloak.
Начиная с версий Keycloak 18+ на базе дистрибутива Quarkus, внесён ряд значительных изменений конфигурации, затрагивающих переменные окружения. Полный список переменных окружения для нового образа Keycloak можно найти здесь
Шаги обновления несколько различаются в зависимости от того, с какой версии LDAP выполняется обновление, а также от типа бэкенда БД, используемого для Keycloak. Обязательно обновитесь до последних образов Keycloak (dcm4che/keycloak:26.0.6) и LDAP (dcm4che/slapd-dcm4chee:2.6.7-33.1). Примечание: Эти шаги обновления действительны только для установок Keycloak с LDAP User Federation
Начальные шаги обновления являются общими, независимо от того, с какой версии LDAP выполняется обновление.
$ docker stop ldap keycloak
ldap
keycloak
$ docker rm -v ldap keycloak
ldap
keycloak
или с использованием Docker Composite
$ docker-compose down
Stopping keycloak_1 ... done
Stopping ldap_1 ... done
Removing keycloak_1 ... done
Removing ldap_1 ... done
Removing network default
Если Keycloak подключён к внешней БД (например, mariadb), остановите и удалите также контейнер базы данных.
$ docker stop ldap mariadb keycloak
ldap
mariadb
keycloak
$ docker rm -v ldap mariadb keycloak
ldap
mariadb
keycloak
или с использованием Docker Composite
$ docker-compose down
Stopping keycloak_1 ... done
Stopping mariadb_1 ... done
Stopping ldap_1 ... done
Removing keycloak_1 ... done
Removing mariadb_1 ... done
Removing ldap_1 ... done
Removing network default
Удалите или переименуйте каталог, который был примонтирован к /opt/keycloak/standalone, например:
$ sudo mv /var/local/dcm4chee-arc/keycloak /tmp
Примечание: Сохраните примонтированный том LDAP
Запустите новую версию серверов OpenLDAP и Keycloak, примонтировав те же каталоги хоста, что и в предыдущей версии.
Примечание: Обязательно задайте переменные окружения при запуске нового Keycloak.
Например:
$ docker run --network=default --name ldap \
-p 389:389 \
-e ARCHIVE_HOST=vrinda-pc \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data \
-v /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d \
-d dcm4che/slapd-dcm4chee:2.6.10-34.3
$ docker run --network=default --name keycloak \
-p 8880:8880 \
-p 8843:8843 \
-e ARCHIVE_HOST=vrinda-pc \
-e KC_HOSTNAME=https://vrinda-pc:8843 \
-e KC_HTTP_PORT=8880 \
-e KC_HTTPS_PORT=8843 \
-e DEBUG=true \
-e KC_HTTP_ENABLED=true \
-e KC_HTTP_RELATIVE_PATH=/auth \
-e KC_LOG=file \
-e KC_LOG_LEVEL=INFO \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=changeit \
-e KEYCLOAK_WAIT_FOR=ldap:389 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/keycloak/data:/opt/keycloak/data \
-v /var/local/dcm4chee-arc/keycloak/themes:/opt/keycloak/themes \
-d dcm4che/keycloak:26.0.6
Если используется Docker Compose, скорректируйте теги версий образов в docker-compose.yaml
и переменные окружения соответствующим образом,
version: "3"
services:
ldap:
image: dcm4che/slapd-dcm4chee:2.6.10-34.3
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "389:389"
environment:
STORAGE_DIR: /storage/fs1
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
keycloak:
image: dcm4che/keycloak:26.0.6
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "8880:8880"
- "8843:8843"
environment:
KC_HTTP_PORT: 8880
KC_HTTPS_PORT: 8843
ARCHIVE_HOST: vrinda-pc
KC_HOSTNAME: vrinda-pc
KC_HOSTNAME_BACKCHANNEL_DYNAMIC: "true"
DEBUG: "true"
KC_HTTP_ENABLED: "true"
KC_HTTP_RELATIVE_PATH: /auth
KC_LOG: file
KC_LOG_LEVEL: INFO
KC_BOOTSTRAP_ADMIN_USERNAME: admin
KC_BOOTSTRAP_ADMIN_PASSWORD: changeit
KEYCLOAK_WAIT_FOR: ldap:389
depends_on:
- ldap
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/keycloak/data:/opt/keycloak/data
- /var/local/dcm4chee-arc/keycloak/themes:/opt/keycloak/themes
перед запуском серверов OpenLDAP и Keycloak выполнив
$ docker-compose -p default up -d ldap keycloak
Creating network "default" with the default driver
Creating ldap_1 ... done
Creating keycloak_1 ... done
Примечание: Замените vrinda-pc именами хостов вашего архива / keycloak.
Инициализируйте account для пользователя admin по умолчанию. ```` $ docker exec ldap_1 init-account admin adding new entry "ou=account,dc=dcm4che,dc=org"
adding new entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
adding new entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Добавьте разрешения account другому пользователю по умолчанию, т.е. пользователю _user_
$ docker exec ldap_1 add-account user
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Для всех остальных дополнительных пользователей, ранее настроенных в Keycloak, повторите скрипт _add-account_ для каждого из них.
$ docker exec ldap_1 add-account my_user1
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
$ docker exec ldap_1 add-account my_user2
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
........
$ docker exec ldap_1 add-account my_user10
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Войдите в административную консоль Keycloak по адресу `http[s]://<KC_HOSTNAME>:<KC_HTTP[S]_PORT>/<KC_RELATIVE_PATH>/admin/dcm4che/console`
и выполните _Synchronize all users_ в **ldap** _User Federation_.
- На вкладке _Role Mappings_ каждого пользователя выберите _account_ в _Client Roles_ и проверьте
Assigned Roles: manage-account
view-profile
Effective Roles: manage-account
manage-account-links
view-profile
```
- Войдите в account console по адресуhttp[s]://
Для всех остальных дополнительных пользователей, ранее настроенных в Keycloak, повторите скрипт add-account для каждого из них. ```` $ docker exec ldap_1 add-account my_user1 modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
$ docker exec ldap_1 add-account my_user2
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
........
$ docker exec ldap_1 add-account my_user10
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Войдите в административную консоль Keycloak по адресу `http[s]://<KC_HOSTNAME>:<KC_HTTP[S]_PORT>/<KC_RELATIVE_PATH>/admin/dcm4che/console`
и выполните _Synchronize all users_ в **ldap** _User Federation_.
- На вкладке _Role Mappings_ каждого пользователя выберите _account_ в _Client Roles_ и проверьте
Assigned Roles: manage-account
view-profile
Effective Roles: manage-account
manage-account-links
view-profile
```
- Войдите в account console по адресуhttp[s]://
Инициализируйте account для пользователя admin по умолчанию. ```` $ docker exec ldap_1 init-account admin adding new entry "ou=account,dc=dcm4che,dc=org"
adding new entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
adding new entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Добавьте разрешения account другому пользователю по умолчанию, т.е. пользователю _user_
$ docker exec ldap_1 add-account user
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Для всех остальных дополнительных пользователей, ранее настроенных в Keycloak, повторите скрипт _add-account_ для каждого из них.
$ docker exec ldap_1 add-account my_user1
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
$ docker exec ldap_1 add-account my_user2
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
........
$ docker exec ldap_1 add-account my_user10
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Войдите в административную консоль Keycloak по адресу `http[s]://<KC_HOSTNAME>:<KC_HTTP[S]_PORT>/<KC_RELATIVE_PATH>/admin/dcm4che/console`
и перейдите в **ldap** _User Federation_.
- Создайте маппер _account_ со следующими параметрами
Name: account
Mapper Type: role-ldap-mapper
LDAP Roles DN: ou=account,dc=dcm4che,dc=org
Use Realm Roles Mapping: OFF
Client ID: account
**Примечание**: Значение _account_, выбранное по умолчанию в выпадающем списке _Client ID_, не действует из-за [бага Keycloak](https://github.com/keycloak/keycloak/issues/12579).
Поэтому явно выберите значение _account_ в этом выпадающем списке перед сохранением конфигурации маппера.
- После создания конфигурации маппера выполните _Sync LDAP Roles to Keycloak_
- Вернувшись к настройкам **ldap** _User Federation_, выполните _Synchronize all users_.
- Для _Clients_ **account**, **account-console**, **admin-cli** и **security-admin-console** назначьте *Default* и *Optional* _Client Scopes_
Default Client Scopes: acr
email
profile
roles
web-origins
Optional Client Scopes: address
microprofile-jwt
offline_access
phone
- На вкладке _Role Mappings_ каждого пользователя выберите _account_ в _Client Roles_ и проверьте
Assigned Roles: manage-account
view-profile
Effective Roles: manage-account
manage-account-links
view-profile
```
- Войдите в account console по адресуhttp[s]://
Для всех остальных дополнительных пользователей, ранее настроенных в Keycloak, повторите скрипт add-account для каждого из них. ```` $ docker exec ldap_1 add-account my_user1 modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
$ docker exec ldap_1 add-account my_user2
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
........
$ docker exec ldap_1 add-account my_user10
modifying entry "cn=view-profile,ou=account,dc=dcm4che,dc=org"
modifying entry "cn=manage-account,ou=account,dc=dcm4che,dc=org"
- Войдите в административную консоль Keycloak по адресу `http[s]://<KC_HOSTNAME>:<KC_HTTP[S]_PORT>/<KC_RELATIVE_PATH>/admin/dcm4che/console`
и перейдите в **ldap** _User Federation_.
- Создайте маппер _account_ со следующими параметрами
Name: account
Mapper Type: role-ldap-mapper
LDAP Roles DN: ou=account,dc=dcm4che,dc=org
Use Realm Roles Mapping: OFF
Client ID: account
**Примечание**: Значение _account_, выбранное по умолчанию в выпадающем списке _Client ID_, не действует из-за [бага Keycloak](https://github.com/keycloak/keycloak/issues/12579).
Поэтому явно выберите значение _account_ в этом выпадающем списке перед сохранением конфигурации маппера.
- После создания конфигурации маппера выполните _Sync LDAP Roles to Keycloak_
- Вернувшись к настройкам **ldap** _User Federation_, выполните _Synchronize all users_.
- Для _Clients_ **account**, **account-console**, **admin-cli** и **security-admin-console** назначьте *Default* и *Optional* _Client Scopes_
Default Client Scopes: acr
email
profile
roles
web-origins
Optional Client Scopes: address
microprofile-jwt
offline_access
phone
- На вкладке _Role Mappings_ каждого пользователя выберите _account_ в _Client Roles_ и проверьте
Assigned Roles: manage-account
view-profile
Effective Roles: manage-account
manage-account-links
view-profile
```
- Войдите в account console по адресуhttp[s]://
j4care после обновления с версий, предшествующих Keycloak 26.xНачиная с версий Keycloak 26+, вместо модификации темы входа по умолчанию, настроенная тема входа j4care предоставляется
дополнительно к встроенным темам входа
- base
- keycloak
- keycloak.v2
При обновлении с предыдущих версий Keycloak необходимо выбрать j4care в качестве темы входа через административную консоль Keycloak:

Вы также можете удалить каталог keycloak в примонтированном к хосту каталоге /opt/keycloak/themes, чтобы там остались только новые:
{mounted-host-directory}
└── j4care
└── login
├── resources
│ ├── css
│ │ └── styles.css
│ └── img
│ ├── favicon.ico
│ ├── j4care-bg.jpg
│ └── j4care-logo.png
└── theme.properties