PHPackages                             iperson1337/pimcore-keycloak-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. iperson1337/pimcore-keycloak-bundle

ActivePimcore-bundle[Authentication &amp; Authorization](/categories/authentication)

iperson1337/pimcore-keycloak-bundle
===================================

Keycloak SSO Integration Bundle for Pimcore

v1.0.6(7mo ago)12.4k↓50%2MITPHPPHP ^8.1

Since Mar 26Pushed 7mo ago1 watchersCompare

[ Source](https://github.com/iperson1337/pimcore-keycloak-bundle)[ Packagist](https://packagist.org/packages/iperson1337/pimcore-keycloak-bundle)[ RSS](/packages/iperson1337-pimcore-keycloak-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (7)Versions (10)Used By (0)

Keycloak SSO для Pimcore 11
===========================

[](#keycloak-sso-для-pimcore-11)

[![Latest Stable Version](https://camo.githubusercontent.com/efa275d89f5fb57c7a67ad7751c1bbba68bb8afa01b25902bb98f25f74e30d04/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f69706572736f6e313333372f70696d636f72652d6b6579636c6f616b2d62756e646c652e737667)](https://packagist.org/packages/iperson1337/pimcore-keycloak-bundle)[![Total Downloads](https://camo.githubusercontent.com/76aa858d55e6ef0570b760156d53e8500c4e92170376fb73d8590f38bff7f9f2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f69706572736f6e313333372f70696d636f72652d6b6579636c6f616b2d62756e646c652e737667)](https://packagist.org/packages/iperson1337/pimcore-keycloak-bundle)[![License](https://camo.githubusercontent.com/c9fad41112cbdcfafd99cb8514c22918101bef57f2f7ca07b41e270e4d028550/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f69706572736f6e313333372f70696d636f72652d6b6579636c6f616b2d62756e646c652e737667)](https://github.com/iperson1337/pimcore-keycloak-bundle/blob/main/LICENSE)

Бандл для интеграции административного интерфейса Pimcore 11 с системой единого входа Keycloak SSO.

[![Keycloak + Pimcore](docs/images/keycloak-pimcore.png)](docs/images/keycloak-pimcore.png)

Возможности
-----------

[](#возможности)

- Аутентификация в административном интерфейсе Pimcore через Keycloak SSO
- Автоматическое создание пользователей Pimcore на основе данных из Keycloak
- Синхронизация данных пользователя при каждом логине
- Поддержка Single Logout (выход одновременно из Pimcore и Keycloak)
- Соответствие ролей Keycloak и Pimcore
- Управление аккаунтом Keycloak из интерфейса Pimcore

Требования
----------

[](#требования)

- Pimcore 11
- Symfony 6.4
- PHP 8.1 или выше
- Настроенный сервер Keycloak

Установка
---------

[](#установка)

### 1. Установка пакета через Composer

[](#1-установка-пакета-через-composer)

```
composer require iperson1337/pimcore-keycloak-bundle
```

2. **Включите бандл в `config/bundles.php`**

```
return [
    // ...
    Iperson1337\PimcoreKeycloakBundle\PimcoreKeycloakBundle::class => ['all' => true],
    // ...
];
```

3. Запуск инсталлятора

```
bin/console pimcore:bundle:install PimcoreKeycloakBundle
```

4. **Добавьте переменные окружения в `.env` файл**

```
###> iperson1337/pimcore-keycloak-bundle ###
KEYCLOAK_CLIENT_ID=pimcore-admin
KEYCLOAK_CLIENT_SECRET=your-client-secret
KEYCLOAK_SERVER_BASE_URL=https://keycloak.example.com/auth
KEYCLOAK_SERVER_PUBLIC_BASE_URL=https://keycloak.example.com/auth
KEYCLOAK_SERVER_PRIVATE_BASE_URL=https://keycloak.example.com/auth
KEYCLOAK_REALM=your-realm
KEYCLOAK_DEFAULT_SCOPES=openid,profile,email,roles
###< iperson1337/pimcore-keycloak-bundle ###

```

5. **Настройте security.yaml**

```
# config/packages/security.yaml
security:
    enable_authenticator_manager: true

    providers:
        # Стандартный провайдер Pimcore
        pimcore_admin:
            id: Pimcore\Security\User\UserProvider

    firewalls:
        # Общедоступные ресурсы, не требующие аутентификации
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        # Публичные API, не требующие аутентификации
        public_api:
            pattern: ^/api/public
            security: false

        #pimcore_admin: '%pimcore_admin_bundle.firewall_settings%'

        # Pimcore Admin интерфейс с аутентификацией через Keycloak
        pimcore_admin:
            pattern: ^/admin
            provider: pimcore_admin
            custom_authenticators:
                - Pimcore\Bundle\AdminBundle\Security\Authenticator\AdminTokenAuthenticator
                - Iperson1337\PimcoreKeycloakBundle\Security\Authenticator\KeycloakAuthenticator
            form_login:
                login_path: pimcore_admin_login
                check_path: pimcore_admin_login_check
                default_target_path: pimcore_admin_index
                username_parameter: username
                password_parameter: password
            logout:
                path: pimcore_admin_logout
                target: pimcore_admin_login
            entry_point: form_login

    access_control:
        # Pimcore admin ACl  // DO NOT CHANGE!
        - { path: ^/admin/settings/display-custom-logo, roles: PUBLIC_ACCESS }
        - { path: ^/admin/login/2fa-verify, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }
        - { path: ^/admin/login/2fa-setup, roles: ROLE_PIMCORE_USER }
        - { path: ^/admin/login/2fa, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }
        - { path: ^/admin/login$, roles: PUBLIC_ACCESS }
        - { path: ^/admin/login/(login|lostpassword|deeplink|csrf-token)$, roles: PUBLIC_ACCESS }
        - { path: ^/admin/login/2fa, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }

        # Маршруты Keycloak
        - { path: ^/admin/keycloak, roles: PUBLIC_ACCESS }

        # Защищенный административный интерфейс
        - { path: ^/admin, roles: ROLE_PIMCORE_USER }
        - { path: ^/asset/webdav, roles: ROLE_PIMCORE_USER }

    role_hierarchy:
        # Pimcore admin  // DO NOT CHANGE!
        ROLE_PIMCORE_ADMIN: [ROLE_PIMCORE_USER]
```

6. **Добавьте маршруты в конфигурацию**

```
# config/routes/iperson1337_pimcore_keycloak.yaml
iperson1337_pimcore_keycloak:
    resource: "@PimcoreKeycloakBundle/config/routing.yaml"
    prefix: /
```

7. **Обновите cookie\_samesite для поддержки OAuth2**

```
# config/packages/framework.yaml
framework:
    session:
        cookie_samesite: 'lax'  # Требуется для работы OAuth2 редиректов
```

8. **Очистите кэш**

```
bin/console cache:clear
```

Конфигурация
------------

[](#конфигурация)

### Переменные окружения

[](#переменные-окружения)

ПеременнаяОписаниеОбязательнаяПример`KEYCLOAK_CLIENT_ID`ID клиента в KeycloakДа`pimcore-admin``KEYCLOAK_CLIENT_SECRET`Секрет клиентаДа`your-client-secret``KEYCLOAK_SERVER_BASE_URL`Базовый URL сервера KeycloakДа`https://keycloak.example.com/auth``KEYCLOAK_SERVER_PUBLIC_BASE_URL`Публичный URL для внешнего доступаНет`https://keycloak.example.com/auth``KEYCLOAK_SERVER_PRIVATE_BASE_URL`Приватный URL для внутреннего доступаНет`https://keycloak.internal.com/auth``KEYCLOAK_REALM`Realm в KeycloakДа`your-realm``KEYCLOAK_DEFAULT_SCOPES`Scopes для OAuth2 запросовНет`openid,profile,email,roles``KEYCLOAK_TARGET_ROUTE_NAME`Маршрут для редиректа после входаНет`pimcore_admin_index`### Конфигурация бандла

[](#конфигурация-бандла)

Вы можете настроить бандл через файл `config/packages/iperson1337_pimcore_keycloak.yaml`:

```
iperson1337_pimcore_keycloak:
    # Маршрут для редиректа после успешного входа
    default_target_route_name: '%env(KEYCLOAK_TARGET_ROUTE_NAME)%'

    # Класс пользователя Pimcore
    admin_user_class: 'Pimcore\Model\User'

    # Язык по умолчанию для новых пользователей
    default_language: 'ru'

    # Автоматически создавать пользователей при первом входе
    auto_create_users: true

    # Синхронизировать данные пользователя при каждом входе
    sync_user_data: true

    # Настройки подключения к Keycloak
    keycloak:
        client_id: '%env(resolve:KEYCLOAK_CLIENT_ID)%'
        client_secret: '%env(KEYCLOAK_CLIENT_SECRET)%'
        server_url: '%env(KEYCLOAK_SERVER_BASE_URL)%'
        server_public_url: '%env(KEYCLOAK_SERVER_PUBLIC_BASE_URL)%'
        server_private_url: '%env(KEYCLOAK_SERVER_PRIVATE_BASE_URL)%'
        realm: '%env(KEYCLOAK_REALM)%'
        ssl_verification: false
        default_scopes: '%env(KEYCLOAK_DEFAULT_SCOPES)%'

    # Маппинг полей пользователя
    user_mapping:
        username: 'preferred_username'
        email: 'email'
        firstname: 'given_name'
        lastname: 'family_name'
```

### Настройка Scopes

[](#настройка-scopes)

Параметр `default_scopes` определяет, какие данные пользователя будут запрашиваться у Keycloak. Вы можете указать scopes в двух форматах:

**Строка (рекомендуется):**

```
KEYCLOAK_DEFAULT_SCOPES=openid,profile,email,roles
```

**Массив в YAML:**

```
default_scopes:
    - openid
    - profile
    - email
    - roles
    - custom_scope
```

**Доступные стандартные scopes:**

- `openid` - обязательный для OpenID Connect
- `profile` - основная информация профиля (имя, фамилия)
- `email` - email адрес
- `roles` - роли пользователя
- `address` - адрес пользователя
- `phone` - телефон

Настройка Keycloak
------------------

[](#настройка-keycloak)

1. Создайте новый клиент в Keycloak
2. Установите Client ID как `pimcore-admin` (или то, что указано в конфигурации)
3. Установите Access Type как `confidential`
4. Включите "Standard Flow" и "Direct Access Grants"
5. Установите Valid Redirect URIs как `https://your-pimcore-domain.com/auth/keycloak/check`
6. После сохранения перейдите на вкладку Credentials для получения Client Secret
7. Настройте Client Scopes в соответствии с вашими `default_scopes`

Маппинг пользователей
---------------------

[](#маппинг-пользователей)

Когда пользователь впервые входит через Keycloak, соответствующий пользователь Pimcore создается автоматически (если включена опция `auto_create_users`) со следующим маппингом:

- Keycloak preferred\_username → Pimcore username
- Keycloak email → Pimcore email
- Keycloak given\_name → Pimcore firstname
- Keycloak family\_name → Pimcore lastname

Маппинг ролей
-------------

[](#маппинг-ролей)

Бандл автоматически преобразует роли Keycloak в роли Symfony Security. Например:

- Роль `admin` в Keycloak преобразуется в `ROLE_ADMIN` и `ROLE_PIMCORE_ADMIN` в Symfony и устанавливает флаг admin для пользователя Pimcore
- Другие роли Keycloak преобразуются с префиксом `ROLE_`

Расширение функциональности
---------------------------

[](#расширение-функциональности)

Для настройки более сложной логики маппинга ролей вы можете расширить сервис `UserMapperService`:

```
