SkeekS CMS получил собственный OAuth 2.1-сервер для безопасного подключения внешних приложений, нейроинтерфейсов и будущих API. Теперь интеграции могут работать от имени конкретного пользователя без передачи его логина и пароля стороннему сервису.
Первым практическим потребителем нового OAuth-сервера стал MCP-интерфейс SkeekS, но архитектура изначально сделана универсальной. К ней можно подключать REST API, мобильные приложения, внутренние сервисы и другие инструменты автоматизации.
Зачем SkeekS собственный OAuth-сервер
Современный сайт всё чаще взаимодействует не только с браузером посетителя. Контентом управляют редакторы и ИИ-ассистенты, CRM обменивается данными с внешними сервисами, а приложениям требуется ограниченный доступ к отдельным функциям. Передавать пароль администратора для таких сценариев небезопасно и неудобно.
OAuth решает эту задачу иначе: пользователь входит на самом сайте SkeekS, а внешнее приложение получает отдельный токен с ограниченным набором разрешений. Пароль пользователя при этом не покидает сайт.
Что реализовано
- Authorization Code Flow с PKCE S256. Код авторизации нельзя безопасно обменять на токен без одноразового проверочного значения.
- Динамическая регистрация клиентов. Совместимые приложения могут зарегистрироваться автоматически, без ручного создания ключей в конфигурации проекта.
- Resource Indicators. Токен выпускается для конкретного защищённого ресурса и не может быть использован в другом API.
- Scopes. Каждая операция получает отдельное разрешение: чтение сайта, управление контентом, работа с задачами, товарами и другими сущностями.
- Безопасное хранение. Секреты клиентов, authorization codes и access tokens сохраняются только в виде криптографических хешей.
- Стандартные metadata endpoints. Клиенты могут автоматически обнаружить адреса авторизации, выдачи токена и список поддерживаемых возможностей.
Динамические и фиксированные разрешения
Для OAuth-клиентов предусмотрено два режима. Dynamic подходит для развивающихся интеграций: после добавления новых возможностей приложение может запросить актуальные scopes при следующей авторизации. Fixed закрепляет заранее определённый allow-list и не позволяет выйти за его пределы.
Уже выданный токен никогда не получает новые полномочия автоматически. Пользователь должен повторно пройти авторизацию и получить новый токен. Это важное правило безопасности: расширение интеграции не должно незаметно расширять доступ действующей сессии.
Подключённые приложения в профиле
В профиле администратора появился раздел «Подключённые приложения». В нём пользователь видит, какие приложения работают от его имени, к какому ресурсу они подключены, какие разрешения получили и до какого момента действует доступ.
Здесь же можно отозвать отдельное подключение или сразу все OAuth-токены пользователя. После отзыва приложение теряет доступ и должно заново запросить авторизацию. При этом интерфейс никогда не показывает секреты клиентов или сами токены.
Основа для открытых интеграций
OAuth-сервер вынесен в самостоятельный пакет skeeks/cms-oauth2-server. Он не привязан к конкретному API: каждый пакет или проект регистрирует собственный защищённый ресурс и набор scopes.
Для владельцев сайтов это означает более безопасные интеграции, прозрачный контроль подключений и возможность в любой момент прекратить доступ. Для разработчиков — единый стандартный механизм авторизации вместо отдельных ключей и самописных схем для каждого нового сервиса.