Идентичность партнёра и полные пользовательские сценарии
AGNT2-532: Бесплатно. Оплата пока не подключена. Для создания, активации и подключения организации не нужны договор, договорный лимит, карта или адреса возврата. Использование не создаёт задолженности или будущих платёжных обязательств. Технические лимиты, утверждённые политики, права операторов и явная активация платформой сохраняются. Будущая оплата подключается отдельно и явно; бесплатный период не оплачивается задним числом.
Исторический проект
Эта страница фиксирует прежний проект, а не текущий статус выпуска. Подготовка ресурсов, scoped authorization и trusted MCP уже реализованы в коммитах Agentfy; см. контракт серверного чата и границы доказательств. Браузерные/BONSITE протоколы и более широкие предложения по оплате/жизненному циклу сохраняют свои условия выпуска. Боевой запуск партнёра не подразумевается.
1. Прямая регистрация
На экране Создать аккаунт Agentfy человек подтверждает прямой email/способ входа и задаёт credentials. Подтверждение: «Создать мою команду; я отвечаю за её оплату». Бесплатный тариф не разрешает списания: платная работа требует действующего мандата и бюджета. Прямой пользователь, команда Agentfy, членство владельца, исходное назначение ответственного плательщика и операция подготовки фиксируются одной транзакцией. Затем видны Готовим ассистента, Открыть команду или Не удалось подготовить — повторить. Повтор продолжает ту же операцию, не создаёт ещё одну команду или платёж.
Это не сценарий добавления credentials из раздела 5. Существующий аккаунт должен войти; совпадение email с записью без пароля не даёт права забрать её. Старые заглушки приглашений требуют подтверждённого принятия и отдельной миграции. Партнёрские потоки не используют текущий захват заглушки по email и механизм основателя платформы.
2. Подключение организации и ключи
Бесплатно. Оплата пока не подключена. Для создания, активации и подключения организации не нужны договор, договорный лимит, карта или адреса возврата. Использование не создаёт задолженности или будущих платёжных обязательств. Технические лимиты, утверждённые политики, права операторов и явная активация платформой сохраняются. Будущая оплата подключается отдельно и явно; бесплатный период не оплачивается задним числом.
Интеграция → Серверные ключи показывает scope, окружение, срок и последнее использование. Создать ключ provisioning показывает секрет один раз, хранится только хеш. Секрет остаётся на сервере BONSITE. Для browser-авторизации нужен отдельный ключ издателя идентичностей, привилегированное подтверждение и аудит. Разработчик может ротировать делегированный provisioning-ключ, но не добавить ему scope входа. Сохраняются издатель, createdAt, expiresAt, revokedAt и версия; удаление записи не заменяет отзыв.
Рекомендации: срок ключа 90 дней, плановое перекрытие при ротации не более 24 часов, аварийный отзыв без перекрытия. Новый ключ повторяет операции в прежней области организации. Отзыв ключа выдачи отзывает производные сессии; ротация provisioning не удаляет пользователей и не трогает независимые прямые сессии. Приостановка/закрытие организации запрещает выдачу и использование её контекстов.
Каждый код, доказательство, связь и производная сессия сохраняют ключ-источник и auth epoch организации. Отозванный ключ не завершает уже начатый вход или связывание. При компрометации издателя повышаем epoch, помещаем связи/доказательства за подозрительный интервал в карантин; возвращаем доверие только после новых независимых доказательств или аудируемого восстановления. Обычная ротация не стирает законные связи, владение и историю.
3. Регистрация BONSITE и подготовка команды
BONSITE аутентифицирует человека и получает непрозрачный externalUserId из серверной сессии. Можно подготовить команду до первого посещения, если сервер уже знает стабильный subject. ID из браузера сам по себе ничего не доказывает; фиктивный email и общий пользователь-владелец запрещены.
BONSITE отправляет внешний ID команды и назначенного создателя. Agentfy атомарно разрешает/создаёт субъекта, команду, членство владельца, назначение плательщика и долговечную операцию. По умолчанию платит организация. Для оплаты командой нужен заранее принятый прямым плательщиком consent для этой команды либо бесплатная/ожидающая оплаты команда: намерение ответственности создателя записано, платная работа запрещена до независимого согласия. Ключ не может принять личный долг. Организация команды после согласия не меняется.
Клиент видит Готовим ассистента, Открыть ассистента или Подготовка прервана — повторить с безопасным номером обращения. Существующий субъект может создать новую команду. Повтор исходного bootstrap существующей команды возвращает операцию и текущую готовность, не возвращает удалённому создателю права и не меняет владельца/плательщика. Изменённые исходные факты при том же внешнем ID дают конфликт; изменения выполняются отдельными разрешёнными действиями. Для чужого/несоответствующего ресурса — «Команда недоступна», без раскрытия другого клиента.
4. Открыть в Agentfy: browser-авторизация
Открыть в Agentfy начинает транзакцию на origin Agentfy. Ссылка BONSITE — только точка входа, не утверждение личности. Предпочтителен проверенный OAuth authorization-code/OIDC, если партнёр его поддерживает. Описанная альтернатива — не заявление о соответствии OIDC.
- Agentfy создаёт отдельную транзакцию цели
login,linkилиinvite, случайные state/nonce, PKCE S256 challenge/verifier для code exchange и Secure/HttpOnly cookie привязки браузера. На сервере сохраняются хеш транзакции, точный redirect URI, организация/окружение, целевой ресурс и срок. Без подходящей транзакции вход невозможен. - Переход разрешён только на зарегистрированный authorization endpoint BONSITE. Партнёр проверяет человека и доступ к workspace, показывает «Продолжить в Agentfy как [аккаунт BONSITE]?». Сервер издателя передаёт доказательство по аутентифицированному backchannel, связанное с transaction ID, nonce, целью, audience, окружением и сроком. Provisioning-ключ отвергается. Первое принятое доказательство фиксирует subject и цель; другой subject при повторе запрещён. У транзакции не более одного действующего кода/результата сессии, включая повтор callback.
- Agentfy создаёт одноразовый случайный код, хранит только хеш и связывает с доказательством/транзакцией. Предпочтителен POST в зарегистрированный callback. Access/refresh bearer не попадает в URL, логи или browser storage. Если authorization code передан в query, его удаляют из логов/referrer, используют
Referrer-Policy: no-referrer, немедленно очищают URL; на callback нет сторонних ресурсов. - Agentfy проверяет cookie, state, nonce, proof, точный redirect и PKCE verifier. Одной транзакцией переводит unused/unexpired код в consumed, повторно проверяет subject/org/membership и создаёт ограниченную сессию. При гонке выигрывает один; ошибка не создаёт сессию.
- Показывает организацию/команду и Продолжить в контексте BONSITE. Если уже открыт другой прямой аккаунт, не заменяет его и не связывает автоматически: Продолжить в отдельном контексте партнёра, Выбрать другой аккаунт, Отмена. Связь требует свежих доказательств и отдельного согласия раздела 5.
У вкладок разные транзакции и context handle. Переключение одной вкладки не меняет полномочия запроса другой. Мутации связаны с явным серверным контекстом, проверяют Origin/CSRF; устаревшая форма получает «Контекст изменился; обновите страницу перед сохранением». Отмена/истечение аннулирует транзакцию, повтор создаёт новую. Утёкший код, invite URL или присланная атакующим ссылка не заменяют browser binding и свежую аутентификацию.
Рекомендуемые сроки: транзакция 5 минут, код 60 секунд, свежая аутентификация не старше 5 минут для связи/отвязки, владения, оплаты и credentials; партнёрская access-сессия 5 минут, ротируемое серверное refresh family, idle 30 минут, абсолютный срок 12 часов. Прямые и партнёрские семьи разделены. Это проектные значения, не измеренные гарантии.
Cookie — Secure/HttpOnly, наиболее строгий совместимый SameSite (обычно Lax; cross-site POST требует отдельного CSRF-безопасного решения). Bearer не хранится в local/session storage. Проверяются issuer, audience, type, алгоритм подписи, время, источник, family и версии прав. Прямой пользователь, партнёр, runtime worker и гость embed — разные типы; refresh/exchange не расширяет источник или scope. Обычный user endpoint отвергает партнёрский токен, пока явно не научен ограниченному субъекту.
5. Добавить прямой вход или связать существующий аккаунт
Аккаунт → Подключить вход Agentfy предлагает Создать прямой вход и Использовать мой аккаунт. Пояснение: «Это подключит доступ к вашей команде BONSITE. Команда, владелец и плательщик не меняются; BONSITE не получает доступ к другим вашим командам». Показываем организацию и узнаваемую метку партнёрского контекста, не требуя персональных данных от BONSITE.
Новые credentials собираются и проверяются в Agentfy вне партнёрского API. Создаём прямого субъекта без новой команды/консьержа, затем связь. Для существующего аккаунта требуем свежий прямой вход и свежую проверку BONSITE; старого cookie, совпавшего email или ключа партнёра недостаточно. Если email занят, нужно войти/восстановить соответствующий аккаунт, а не создавать дубликат или захватывать запись.
Экран Связать [прямой аккаунт] с [контекстом BONSITE] показывает прямой аккаунт только независимо вошедшему браузеру. Commit разрешён при действующих доказательствах, активных subject/org, разрешённой политике и отсутствии другой активной связи. Блокировка строки subject/link и уникальность активного subject решают гонку. Повтор того же подтверждения возвращает результат. Если связь уже с другим аккаунтом: «Уже подключено; отключите или восстановите прежнюю связь», без раскрытия аккаунта BONSITE. Партнёр не может перепривязать его сам.
Локальное создание credentials и первой связи атомарно. Если внешний credential provider успел создать вход, а commit связи не прошёл, остаётся независимо доступный пустой прямой аккаунт и явный конфликт. Не создаём команду для компенсации и не удаляем существующие credentials. Просроченные proof требуют нового подтверждения. Членство, владельцы, ID агентов, долг и ledger не меняются.
6. Переключение контекстов и отключение связи
После прямого входа Команды разделяют Мои команды Agentfy и подписанные партнёрские контексты. Выбор BONSITE проверяет активные link, subject, org policy, team и membership. Действующий субъект — партнёрский User, прямой аккаунт — источник аутентификации; права не складываются. Возврат использует независимую прямую сессию. Партнёрский вход не получает такой путь без отдельной прямой аутентификации и не перечисляет её команды/связи.
Рекомендуемые поля политики: allowNewLinks и allowLinkedLogin. Запрет новых связей сохраняет старый доступ; запрет связанного входа отзывает все производные контексты, сохраняя записи для явного включения. Deprovision subject блокирует доступ через прямой аккаунт независимо от его состояния. Повторное включение не восстанавливает отозванные членства/family.
Отключить BONSITE требует свежего независимого прямого входа и предупреждает: «Команда и счета BONSITE сохранятся. Для входа используйте BONSITE». Отзываются связь, её ожидающие транзакции, производные контексты и refresh families. Независимые BONSITE-origin сессии продолжают работать, пока subject активен. Другие прямые сессии, владение и долги не меняются. Повторная связь требует двух новых доказательств; старые коды/refresh не оживают. Отзыв партнёрской личности закрывает её доступ, но не меняет прямые credentials.
Удаление последнего прямого способа входа запрещено до добавления другого подтверждённого метода либо явного удаления аккаунта. Удаление прямого аккаунта отзывает его сессии/связи, но сохраняет партнёрских субъектов и команды. Для собственных прямых команд и долгов нужны передача/хранение, не каскадное удаление. Восстановление прямого входа идёт через независимый канал Agentfy, никогда через ключ партнёра. Потерю BONSITE нельзя обойти связью. Support восстанавливает доступ только по отдельно разрешённой процедуре проверки личности с аудитом; без доказательства доступ остаётся закрытым.
7. Приглашения и передача владения
Команда → Участники → Пригласить выбирает роль и допустимый тип: в клиентских командах BONSITE только внешние субъекты его namespace, в Agentfy — прямые. Владелец партнёрской команды не приглашает свой прямой аккаунт для обхода отзыва. Partner invite адресован namespace + stable subject; direct invite — подтверждённому аккаунту либо одноразовому приглашению после независимого входа. Email — доставка, не право присвоить subject.
Запись содержит команду, целевого субъекта, роль, пригласившего, версию, срок (рекомендация 7 дней), consumed. Экран показывает организацию/команду/роль, Принять / Отклонить, без чатов/секретов. При принятии повторно проверяем полномочия пригласившего, proof цели, состояние команды и политику. Пересылка URL или совпадение email не меняет получателя. Redemption и членство атомарны/идемпотентны; отменённое/истёкшее приглашение: Запросите новое приглашение.
Администратор команды не назначает владельцев; владелец предлагает повышение или передачу активному участнику. Передать владение указывает получателя, агентов и будущую роль отправителя. Получатель принимает с подходящим контекстом и свежим proof: прямой вход для Agentfy, внешний субъект BONSITE для его команды. Под блокировкой/версией команды сначала добавляем/подтверждаем нового владельца, затем понижаем инициатора. Остальные владельцы сохраняются. Отмена/отказ/истечение не меняет роли. Оплата не передаётся.
Работающей команде нужен минимум один активный владелец. Добровольное снятие/понижение последнего блокируется транзакционно, в том числе при гонках. Перед удалением/деактивацией любого субъекта учитываем Agent(ownerId, teamId): явно передаём агентов подходящему активному участнику с подтверждением либо приостанавливаем их и сохраняем неактивную запись членства. Расписания не остаются бесхозными, случайный участник не становится владельцем автоматически. Передача агента не раскрывает личные user-scoped secrets; зависимые права отзываются/перенастраиваются до возобновления.
8. Приостановка, удаление и восстановление
Отзыв по безопасности важнее последнего владельца. Если отключён последний внешний владелец, приостанавливаем команду/работу, сохраняем доказательства владения и требуем явного аудируемого восстановления/назначения. Нельзя отказать в отзыве или автоматически повысить участника.
| Событие | Немедленный результат | Восстановление / сохранённое |
|---|---|---|
| Subject отключён/удалён | Закрыты партнёрские и связанные контексты, сессии/приглашения; автоматика ждёт передачи | Тот же subject возвращается после проверки; отозванное членство назначается заново; ID не переиспользуется |
| Прямой аккаунт отключён/удалён | Закрыты его и производные контексты, обработаны собственность/оплата | Партнёрские субъекты сохраняются, независимый BONSITE-вход возможен; финансовые доказательства остаются |
| Команда приостановлена | Нет работы, принятия приглашений, новых прав; контексты отозваны | Проверить владельцев, агентов, права и плательщика; не переигрывать очередь автоматически |
| Команда удалена | Tombstone ID, отзыв ключей/приглашений, остановка jobs, отмена provider subscription | Разрешённый экспорт до удаления, сохранение финансов/аудита; bootstrap не воскрешает |
| Организация закрыта/приостановлена | Нет выдачи и выполнения во всех её командах, включая связанные контексты/делегирование | Другие организации и прямые команды доступны; namespace/финансы/tombstones сохраняются |
| BONSITE недоступен/прекратил работу | Нового proof нет; связанный вход только пока активны политика/subject и lease | Нет автоматического переноса в Agentfy; отдельно разрешённый договором экспорт/переход, иначе приостановка и урегулирование оплаты |
| Спонсор/мандат отозван | Новые платные резервы запрещены с cutoff | Бесплатные возможности сохраняются в рамках тарифа; владельца не назначаем плательщиком автоматически |
BONSITE отправляет аутентифицированные повторяемые lifecycle-события с монотонной ревизией subject. Agentfy подтверждает только долговечную запись. Старое событие активации не отменяет новую блокировку. Рекомендация: сверка не реже 5 минут и lease состояния партнёра не старше 15 минут для любого партнёрского/связанного действия. При сбое доступ останавливается после lease; свежий login proof не отменяет известную блокировку. Lease относится к отдельному внешнему subject и продлевается только свежей аутентифицированной сверкой именно этого subject. Heartbeat организации и старое/повторное событие не обновляют confirmedAt и не продлевают lease. SLA отзыва считается с принятия отзыва Agentfy, не с невидимого upstream-события.
Каждое действие, refresh, авторизация download и запуск job проверяют актуальное состояние; недоступность проверки означает отказ. Потоки/socket закрываются; целевая отмена выполняющейся работы — до 60 секунд, с измерением под нагрузкой перед выпуском. Уже произошедшие внешние эффекты не откатываются, фактический расход записывается. Download capability истекает в том же пределах либо проходит revocation-aware proxy. Возобновление заново авторизует работу; старые jobs не переигрываются автоматически. Аудит содержит ID/причину, не токены/секреты.
Основание мер безопасности
Принцип проверки обеих сторон описан в рекомендациях Auth0; глобальное объединение аккаунтов оттуда не переносим. Redirect, PKCE и login-CSRF опираются на RFC 9700. Стабильный issuer/subject вместо email — на OpenID Connect Core. Сам протокол, сроки и модель изоляции — рекомендации Agentfy, требующие проверки реализации.