AiHummer
Русский
Войти
v1.0.x
{ }Swagger

Connections (OAuth2 на пользователя)

v1.0.x · обновлено 2026-07-05

Connections — это способ для конкретного пользователя предоставить AiHummer доступ к стороннему сервису от своего имени. Вместо одной общей служебной учётной записи каждый человек проходит стандартный поток OAuth2 authorization-code, полученный токен запечатывается в зашифрованном vault, а во время хода (turn) рантайм резолвит токен именно этого пользователя, когда он нужен инструменту.

Это «персональная» половина модели доступов AiHummer. Полную картину — когда лучше выбрать общий доступ и как работает fallback — см. в Персональные и общие доступы.

Что такое Connection

Connection связывает три сущности: провайдер (OAuth2-приложение, против которого вы авторизуетесь), пользователь (тот, кто прошёл экран согласия) и запись в vault (где хранится выданный токен). После установления любой инструмент, действующий от имени этого пользователя, может прозрачно использовать токен — при этом токен никогда не попадает в контекст модели, в логи или в промпт.

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

Поток authorization-code

Connection создаётся каноническим трёхногим грантом OAuth2 authorization-code:

  1. Пользователь начинает подключение провайдера из админки — запросом POST/GET /v1/admin/connections/oauth/start.
  2. AiHummer перенаправляет браузер на authorization-эндпоинт провайдера с запрошенными scope.
  3. Пользователь подтверждает экран согласия; провайдер возвращает одноразовый authorization code на /v1/admin/connections/oauth/callback.
  4. Внутри обработчика callback AiHummer на стороне сервера обменивает этот код на access token (и, если провайдер это поддерживает, refresh token) на токен-эндпоинте провайдера.
  5. Токен записывается в vault, а Connection помечается активным.

Обмен «код → токен» выполняется на стороне сервера внутри callback, чтобы client secret и выданный токен никогда не покидали gateway.

[!NOTE] Не путайте этот поток с POST /v1/oauth/token: это собственный OAuth2-эндпоинт AiHummer с грантом client-credentials — служебные аккаунты, зарегистрированные через /v1/admin/apikeys/register-client, обменивают на нём свои client_id/client_secret на короткоживущий токен ah-. К Connections со сторонними провайдерами он отношения не имеет.

[!NOTE] Поток authorization-code всегда включает реальный шаг согласия в браузере. Connection нельзя создать «вслепую» по одному API-ключу — действующий пользователь должен один раз подтвердить scope.

Где хранится токен

Выданный токен хранится в зашифрованном vault доступов AiHummer, а не в открытой конфигурации. Vault использует конвертное шифрование (AES-256-GCM с ключом данных на арендатора под мастер-ключом), и секреты никогда не копируются в контекст модели, в промпты или логи. Отозванный или истёкший Connection просто не оставляет пригодного к использованию секрета.

oauth/start ─▶ согласие ─▶ код ─▶ oauth/callback (обмен у провайдера) ─▶ access/refresh token ─▶ vault (шифрованный)

Резолвится по действующему пользователю

Определяющее свойство Connection в том, что он резолвится по действующему пользователю. Когда агент вызывает инструмент, которому нужен провайдер, рантайм находит Connection, принадлежащий пользователю, от имени которого идёт ход, и использует его токен. Два сотрудника, общающиеся с одним и тем же агентом, действуют со своими авторизациями и видят только то, что разрешает их собственный грант.

Именно это делает Connections подходящими для персональных, по-пользователю интеграций: доступ каждого человека изолирован, проверяем в аудите и отзываем по отдельности.

Доступные интеграции

Через поток OAuth2 пользователь может подключить свою учётную запись в любом из поставляемых сервисов. Эти персональные интеграции доступны «из коробки»:

Группа Сервисы
Google Gmail, Google Calendar, Google Contacts, Google Tasks, Google Drive, YouTube
Microsoft Outlook Mail, Outlook Calendar, OneDrive, Microsoft To Do
Продуктивность Todoist, Asana, Jira Cloud, ClickUp, GitLab, Linear, monday.com
Здоровье и образ жизни Fitbit, Oura Ring, Strava, Spotify, Samsung SmartThings

Каждая из них подключается одним и тем же authorization-code потоком: пользователь проходит экран согласия провайдера, токен запечатывается в vault и резолвится именно для этого пользователя, когда инструмент обращается к сервису.

Управление в админке

Из админки оператор может:

  • Видеть, какие провайдеры подключил каждый пользователь и состояние каждого токена.
  • Начать новое подключение (запустить поток согласия для выбранного провайдера).
  • Отозвать подключение — это удаляет запись в vault и отключает резолвинг.

Подключения бывают персональными (принадлежат конкретному пользователю; он сам может их отключить) и общими для рабочего пространства (помечены тегом «Workspace shared»; персонально их отключить нельзя). К одному провайдеру можно привязать несколько аккаунтов: кнопка «+ аккаунт» запрашивает подпись (label) и сохраняет ещё одну учётную запись того же провайдера — например, несколько календарей Google или почтовых ящиков.

Поскольку базовые доступы персональны, Connection чаще всего и есть правильный выбор, когда действие должно быть привязано к авторизации конкретного человека и ограничено ею, а не общей учётной записью рабочего пространства.

Куда дальше