OAuth 2.1 в SkeekS CMS: безопасное подключение приложений и ИИ

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.

Для владельцев сайтов это означает более безопасные интеграции, прозрачный контроль подключений и возможность в любой момент прекратить доступ. Для разработчиков — единый стандартный механизм авторизации вместо отдельных ключей и самописных схем для каждого нового сервиса.

Следующий шаг уже сделан: на базе OAuth 2.1 работает новый MCP API SkeekS, через который ИИ-ассистенты могут управлять контентом, CRM и интернет-магазином с правами авторизованного пользователя.