besnovatyj / yii2-cms-oauth2
OAuth2-сервер (интеграция league/oauth2-server) для REST-слоя Yii2 CMS: выдача и валидация Bearer-токенов.
Package info
github.com/besnovatyj/yii2-cms-oauth2
Type:yii2-extension
pkg:composer/besnovatyj/yii2-cms-oauth2
Requires
- php: >=8.4
- besnovatyj/yii2-cms-contracts: ^1.0
- besnovatyj/yii2-cms-kernel: ^1.0
- league/oauth2-server: ^9.0
- nyholm/psr7: ^1.8
- nyholm/psr7-server: ^1.1
- psr/http-message: ^1.1 || ^2.0
- yiisoft/yii2: ~2.0.0
Requires (Dev)
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2026-07-08 15:37:02 UTC
README
OAuth2-сервер для REST-слоя Yii2 CMS — тонкая интеграция библиотеки
league/oauth2-server в Yii2. Отвечает за выдачу
токенов (grant types: password, refresh_token) и валидацию Bearer-токенов на входящих
REST-запросах.
Это инфраструктурный фундамент REST: от него зависят REST-контроллеры любых модулей (по аналогии с тем, как backend/frontend-контроллеры зависят от своих приложений).
Состав
AuthorizationServer/ResourceServer— Yii-компоненты-обёртки над league (выдача / валидация).bridge/— адаптеры под интерфейсы league (AccessTokenEntity,ClientEntity,RefreshTokenEntity,ScopeEntity,UserEntity,Psr7Factory— мост Yii ↔ PSR-7).entities/— ActiveRecord под таблицыoauth2_*(клиенты, access/refresh токены, scopes).repositories/— реализации репозиториев league.filters/OAuth2BearerAuth— Yii-фильтр авторизации для контроллеров.migrations/— схема БД (таблицыoauth2_*+ дефолтные scopes), устанавливается через modman.
Установка
composer require besnovatyj/yii2-cms-oauth2
Миграции накатываются менеджером модулей (modman) при установке. Затем:
- Сгенерировать ключи (в репозиторий не входят, см.
docs/keys/README.md):bash docs/generate-keys.sh
- Смонтировать компоненты в конфиге приложения (composition root, напр.
app/rest/config/main.php):'components' => [ 'oauth2AuthServer' => [ 'class' => \Besnovatyj\Oauth2\AuthorizationServer::class, 'privateKeyPath' => '@app/.../keys/private.key', 'encryptionKey' => '...', // base64_encode(random_bytes(32)); в прод — Docker Secrets 'accessTokenTTL' => 3600, 'refreshTokenTTL' => 2592000, 'keyPermissionsCheck' => !YII_DEBUG, ], 'oauth2ResourceServer' => [ 'class' => \Besnovatyj\Oauth2\ResourceServer::class, 'publicKeyPath' => '@app/.../keys/public.key', 'keyPermissionsCheck' => !YII_DEBUG, ], ],
- Endpoint выдачи токена (
POST /oauth2/token) — контроллер в REST-приложении (см. примерapp/rest/controllers/OAuth2Controller.php).
Полная документация, примеры запросов, SQL и TypeScript-клиент — в docs/.
⚠️ Остаточная зависимость от модуля User
src/repositories/UserRepository.php (реализация «password grant») пока ссылается напрямую на
Besnovatyj\User\repositories\UserReadRepository — резолвится через DI-контейнер
(Yii::$container->get(...)). Это единственная точка связи с ядром/модулем User.
План развязки (см. docs/MIGRATION-NOTE.md и общий отчёт GITHUB_MIGRATION_READINESS.md, раздел B6):
инвертировать через контракт UserProvider в yii2-cms-contracts (метод вида
findActiveByUsername() / validateCredentials()), либо перенести этот репозиторий в пакет
besnovatyj/yii2-cms-user при его выделении. До этого пакет корректно работает в составе
приложения, где Besnovatyj\User доступен, но автономно (без User) собирается, но не функционирует
password-grant.
Тот же residual-момент в dev-скрипте docs/dev/create-test-user.php (Besnovatyj\User\entities\User).
Зависимости
php >=8.4, yiisoft/yii2, league/oauth2-server ^9, nyholm/psr7, nyholm/psr7-server,
psr/http-message, besnovatyj/yii2-cms-kernel, besnovatyj/yii2-cms-contracts.
Лицензия
MIT.