Перейти к содержимому
CalabДокументация

Экран согласия и доступы пользователя

Что видит человек при входе через Calab, как работают повторные входы и как отозвать доступ приложения.

Calab никогда не выдаёт токены приложению молча при первом входе: человек сам подтверждает, что приложение может узнать, кто он. Администратор пространства не может дать согласие за участников.

Что видит пользователь

После перехода на /authorize браузер попадает на страницу согласия Calab (https://id.example.com/oauth/consent?request=…):

  1. Если человек не вошёл в Calab в этом браузере — обычный вход.
  2. Если в пространстве включён «Обязательный SSO» и корпоративное подтверждение устарело — вход через корпоративный IdP (повторная аутентификация).
  3. Экран «Разрешить вход в приложение?»:
    • название приложения (как его записал администратор клиента);
    • пространство и имя аккаунта, от имени которого выполняется вход;
    • запрошенные данные профиля: имя, email;
    • галочка «Разрешить продолжение доступа» — только если клиент запросил refresh token; без неё приложение получит доступ на 5 минут без продления;
    • пояснение: «Приложение получит только выбранные данные профиля этого пространства. Оно не получает доступ к чатам или другим пространствам.»
  4. Кнопки «Разрешить» и «Отказать». Отказ возвращает человека в приложение с error=access_denied.

Требования и ограничения:

  • Запрос на вход действует 10 минут. Позже — нужно начать вход в приложении заново.
  • Войти могут только участники пространства. Гости и боты получают отказ.
  • Если администратор переименовал клиент, пока экран был открыт, Calab покажет новое название ещё раз перед выдачей кода.
  • Страница согласия не открывается во фрейме (frame-ancestors 'none').
  • В одном браузере одновременно может ждать не больше 4 незавершённых входов; более старые сбрасываются.

Повторные входы

Согласие запоминается для пары «участник + клиент» с конкретным набором scopes и решением о продлении.

  • prompt=none — тихий вход без интерфейса: работает, если есть сессия Calab в этом браузере, согласие на те же (или более широкие) scopes и название клиента не менялось. Иначе — login_required, consent_required или interaction_required.
  • prompt=consent — показать экран согласия, даже если согласие уже есть.
  • prompt=login или max_age — потребовать свежий вход в Calab (продление сессии не считается).
  • Новое согласие на этом устройстве заменяет прежний доступ этого устройства. Если человек сузил данные или снял «Разрешить продолжение доступа», Calab закрывает доступы приложения на всех его устройствах, чтобы нигде не осталось более широкого доступа.

Управление доступами: «OAuth-приложения»

Каждый человек видит приложения, в которые входил через Calab, в Настройки → «OAuth-приложения»: название приложения, пространство, scopes и срок действия («Действует до»). Кнопка «Отозвать доступ»:

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

API для приложения Calab

Эти маршруты обслуживают экран «OAuth-приложения» и требуют сессию человека (токены ботов и OAuth-токены не принимаются; гости не допускаются).

МетодПутьЧто делает
GET/api/me/oauth-grantsСписок доступов → {grants: [...]}
DELETE/api/me/oauth-grants/{grant}Отозвать доступ приложения → 204
JSON
{
  "grants": [
    {
      "id": "0192a2c4-1d7e-7f30-8b91-2a3b4c5d6e7f",
      "workspaceId": "0192a000-0000-7000-8000-0000000000aa",
      "clientName": "Acme CRM",
      "scopes": ["email", "openid", "profile"],
      "createdAt": "2026-10-14T09:05:00Z",
      "expiresAt": "2026-10-14T17:05:00Z"
    }
  ]
}

Для разработчика приложения

  • Покажите человеку, что вход идёт «через Calab» и в какое пространство — у разных пространств разные issuer.
  • Обработайте error=access_denied спокойно: человек вправе отказаться.
  • Не просите email, если он вам не нужен: чем меньше данных, тем охотнее соглашаются.
  • Дайте способ отключить интеграцию у себя и вызовите /revoke.