Подключения пользователей через OAuth 2.0
Подключения (Connections) — это способ для конкретного пользователя предоставить AiHummer доступ к стороннему сервису от своего имени. Вместо одной общей служебной учётной записи каждый человек проходит стандартный поток OAuth 2.0 Authorization Code, полученный токен запечатывается в зашифрованном хранилище секретов, а во время обработки запроса среда выполнения выбирает токен именно этого пользователя, когда он нужен инструменту.
Это «персональная» половина модели доступов AiHummer. Полную картину — когда лучше выбрать общий доступ и как работает резервный вариант — см. в Персональные и общие доступы.
Что такое подключение
Подключение связывает три сущности: провайдер (сторонний сервис, в котором пользователь проходит авторизацию), пользователь (тот, кто прошёл экран согласия) и запись в хранилище секретов (где хранится выданный токен). После установления любой инструмент, действующий от имени этого пользователя, может прозрачно использовать токен — при этом токен никогда не попадает в контекст модели, в журналы или в промпт.
Подключения управляются из админ-панели. В списке видно подключённые провайдеры по каждому пользователю, их статус и время последнего обновления.
Поток authorization-code
Подключение создаётся стандартным потоком OAuth 2.0 Authorization Code с участием пользователя:
- Пользователь начинает подключение провайдера из админ-панели — запросом
POST/GET /v1/admin/connections/oauth/start. - AiHummer перенаправляет браузер на authorization-endpoint провайдера с
запрошенным набором прав (в протоколе —
scope). - Пользователь подтверждает экран согласия; провайдер возвращает одноразовый
authorization code на
/v1/admin/connections/oauth/callback. - Внутри обработчика callback AiHummer на стороне сервера обменивает этот код на access token (и, если провайдер это поддерживает, refresh token) на токен-endpoint провайдера.
- Токен записывается в хранилище секретов, а подключение помечается активным.
Обмен «код → токен» выполняется на стороне сервера внутри callback, чтобы client secret и выданный токен никогда не покидали gateway.
[!NOTE] Не путайте этот поток с
POST /v1/oauth/token: это собственный OAuth2-endpoint AiHummer с грантом client-credentials — служебные аккаунты, зарегистрированные через/v1/admin/apikeys/register-client, обменивают на нём своиclient_id/client_secretна короткоживущий токенah-. К подключениям со сторонними провайдерами он отношения не имеет.
[!NOTE] Поток authorization-code всегда включает реальный шаг согласия в браузере. Подключение нельзя создать «вслепую» по одному API-ключу — действующий пользователь должен один раз подтвердить набор запрошенных прав.
Где хранится токен
Выданный токен хранится в зашифрованном хранилище секретов AiHummer, а не в открытой конфигурации. Хранилище использует конвертное шифрование (AES-256-GCM с ключом данных на арендатора под мастер-ключом), и секреты не копируются в контекст модели, в промпты или журналы. Отозванное или истёкшее подключение просто не оставляет пригодного к использованию секрета.
oauth/start ─▶ согласие ─▶ код ─▶ oauth/callback (обмен у провайдера) ─▶ access/refresh token ─▶ vault (шифрованный)
Выбирается по действующему пользователю
Определяющее свойство подключения в том, что оно выбирается по действующему пользователю. Когда агент вызывает инструмент, которому нужен провайдер, среда выполнения находит подключение, принадлежащее пользователю, от имени которого обрабатывается запрос, и использует его токен. Два сотрудника, общающиеся с одним и тем же агентом, действуют со своими авторизациями и видят только то, что разрешает их собственный грант.
Именно это делает подключения подходящими для персональных, по-пользователю интеграций: доступ каждого человека изолирован, проверяем в аудите и отзываем по отдельности.
Доступные интеграции
Через поток OAuth2 пользователь может подключить свою учётную запись в любом из поставляемых сервисов. Эти персональные интеграции доступны «из коробки»:
| Группа | Сервисы |
|---|---|
| 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 потоком: пользователь проходит экран согласия провайдера, токен запечатывается в хранилище секретов и выбирается именно для этого пользователя, когда инструмент обращается к сервису.
Управление в админ-панели
Из админ-панели оператор может:
- Видеть, какие провайдеры подключил каждый пользователь и состояние каждого токена.
- Начать новое подключение (запустить поток согласия для выбранного провайдера).
- Отозвать подключение — это удаляет запись в хранилище секретов, и токен перестаёт выбираться для инструментов.
Подключения бывают персональными (принадлежат конкретному пользователю; он сам может их отключить) и общими для рабочего пространства (помечены тегом «Workspace shared»; персонально их отключить нельзя). К одному провайдеру можно привязать несколько аккаунтов: кнопка «+ аккаунт» запрашивает подпись (label) и сохраняет ещё одну учётную запись того же провайдера — например, несколько календарей Google или почтовых ящиков.
Поскольку базовые доступы персональны, подключение чаще всего и есть правильный выбор, когда действие должно быть привязано к авторизации конкретного человека и ограничено ею, а не общей учётной записью рабочего пространства.
Куда дальше
- Персональные и общие доступы — полная модель областей доступа и когда что выбирать.
- BYOK: ключи провайдеров LLM — свои ключи модели на арендатора.
- Маркетплейс: обзор и уровни — где находятся интеграции на базе OAuth.