roilafx / espocrmevo
Интеграция EspoCRM для Evolution CMS
Requires
- php: >=8.2
- ext-json: *
- ext-openssl: *
- ext-pdo: *
- defuse/php-encryption: ^2.4
- illuminate/support: ^8.0
- laminas/laminas-diactoros: ^3.8
- lcobucci/jwt: ^5.6
- league/oauth2-server: ^9.4
- nyholm/psr7: ^1.0
- symfony/psr-http-message-bridge: ^2.0
Suggests
- ext-sodium: Рекомендуется для улучшенной безопасности JWT
This package is auto-updated.
Last update: 2026-07-17 06:30:52 UTC
README
Пакет обеспечивает единый вход (SSO) администраторов Evolution CMS в EspoCRM по протоколу OpenID Connect, а также встраивает интерфейс CRM в админ‑панель CMS.
Возможности
- OIDC‑провайдер (Authorization Code Flow с PKCE) на базе
league/oauth2-server. - Генерация
id_tokenс поддержкойnonce. - Хранение авторизационных кодов в БД.
- Эндпоинты:
/oidc/authorize,/oidc/token,/oidc/userinfo,/oidc/jwks. - Встроенный iframe для доступа к EspoCRM из панели управления CMS.
Требования
- Evolution CMS ≥ 3.x (с Laravel‑компонентами).
- PHP ≥ 8.2 с расширениями openssl, json, pdo_mysql, sodium (рекомендуется).
- EspoCRM, установленная отдельно (пакет не содержит CRM). По умолчанию ожидается, что EspoCRM доступна по пути /manager/media/espoCRM.
Установка
-
Установка пакета
php artisan package:installrequire roilafx/Espocrmevo "*" -
Публикация стилей и скриптов
php artisan vendor:publish --provider="roilafx\Espocrmevo\EspocrmevoServiceProvider" -
Выполните миграции:
php artisan migrate
-
Сгенерируйте RSA‑ключи (в core/storage/keys):
openssl genrsa -out storage/keys/private.key 2048 openssl rsa -in storage/keys/private.key -pubout -out storage/keys/public.key
-
Сгенерируйте ключ шифрования Выполните в терминале:
php -r "echo 'def00000' . bin2hex(random_bytes(32));" -
Полученный ключ занести в файл .env именем encryptionKey
-
Установить EspoCRM Перейдите в модуль и выполните установку. Потребуется дополнительная БД. Я брал за основу вот этот релиз и на нем все тестировал GitHub. Просто разархивировал его в /manager/media/espoCRM. Чтобы в espoCRM был его index.php
Настройка
Создание OIDC‑клиента
Пакет предоставляет консольную команду для создания клиента:
php artisan espocrmevo:create-client --id=espocrm --redirect="https://your.domain/manager/media/espoCRM/oauth-callback.php" --name="EspoCRM"
Если не указать --secret, будет сгенерирован случайный ключ длиной 64 символа. redirect можно скопировать из Админиистративной панели EcpoCRM Администрирование -> Аутентификация -> OIDC Запись появится в таблице oidc_clients.
Переменные окружения (.env)
| Переменная | Назначение | По умолчанию |
|---|---|---|
| OIDC_ISSUER | Издатель токенов (iss) | route.local |
| OIDC_AUDIENCE | Получатель токенов (aud) | espocrm |
| OIDC_KEY_ID | Идентификатор ключа (kid) в JWKS | 1 |
| encryptionKey | Ключ шифрования OAuth‑кодов (обязателен) | — |
Конфигурация EspoCRM
В административной панели EspoCRM:
Администрирование -> Аутентификация -> OIDC
- Клиент ID:
espocrm - Секрет клиента: если задавали
- Authorization Endpoint:
https://your.domain/oidc/authorize - Token Endpoint:
https://your.domain/oidc/token - UserInfo Endpoint:
https://your.domain/oidc/userinfo - JWKS Endpoint:
https://your.domain/oidc/jwks - Scopes:
openid profile email phone - Username Claim:
username(рекомендуется) - Создать пользователя: +
- Включить PKCE: +
Структура пакета
core/custom/packages/espocrmevo/
├── src/
│ ├── Commands/ # CreateClient
│ ├── Controllers/ # OIDCController, CrmController
│ ├── Entities/ # Сущности токенов, кодов
│ ├── Grants/ # NonceAuthCodeGrant
│ ├── Models/ # OidcClient, AuthCode
│ ├── Repositories/ # Репозитории для League
│ ├── RequestTypes/ # NonceAuthorizationRequest
│ ├── migrations/ # Миграции таблиц
│ └── EspocrmevoServiceProvider.php
├── routes.php # Маршруты для iframe
├── routes_oidc.php # Маршруты OIDC
└── README.md
Ключевые особенности реализации
nonceпередаётся не через сессию, а через расширенный объект авторизации и БД.- Шифрование кода – через
defuse/php-encryption(как в библиотеке). - Поддержка PKCE включена по умолчанию.