Перейти к содержимому

ADR-0005: Интеграция Security Broker

Статус: Принято — 2026-09-23. Владелец проекта утвердил это решение. Принятие фиксирует архитектурный контракт; оно не означает готовую реализацию или успешное прохождение невыполненных проверок.

Принятое уточнение — 2026-09-24: одна граница брокера обслуживает CLI и машинных клиентов с доверенными полномочиями задачи и раздельными привязками действующего участника и субъекта по ADR-0013/0014. Исходная дата принятия и невыполненные проверки интеграции сохраняются.

English | Русский

ADR-0002 закрепляет проверку доступа за ядром и позволяет владельцу CLI регистрировать доверенные службы. ADR-0003 сохраняет эту границу в IPC процессов. Security Broker предоставляет общую точку интеграции личности, прав и поиска расширений до запуска их кода.

Компания должна подключать свой шлюз входа и службу прав без сопровождения отдельного клиента Rukh для каждого поставщика. Собственные существующие службы также должны вписываться в эту границу. Авторы расширений объявляют нужные действия, узнают допустимые действия и запрашивают защищаемые операции через ядро. Загрузчик расширений получает через ту же интеграцию список допустимых расширений, зависящих от брокера; его полный контракт — отдельная тема архитектуры.

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

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

  • Одна доверенная интеграция для поиска расширений и исполнения.
  • Стандартные подключения через настройки без SDK конкретного продукта; собственные адаптеры там, где опубликованные протоколы не покрывают службу организации.
  • Разделение объявленных требований, поддерживаемых средств и предоставленных прав.
  • Список допустимых расширений без запуска их кода и подготовки среды.
  • Сохранение контекста ядра, ограничений доступа и существующих правил обработки сбоев.
ВариантПреимуществоОграничение
Каждое расширение подключается к брокеруНезависимая интеграцияДублирует работу с учётными данными и правами; не управляет поиском до запуска
Проверять права только в загрузчикеОдин отфильтрованный каталогНе охватывает права команд и защищаемые операции ядра
Клиент для каждого продукта входа или управления правамиПрямой доступ к особенностям продуктаПовторяющееся сопровождение и привязка поведения CLI к продуктам
Общая граница с протокольными клиентами и заменяемыми адаптерамиЕдиный контекст и решения; стандартные интеграции задаются настройкамиНужно явное соответствие личности, прав организации и сведений о расширениях

Security Broker объединяет установление личности, авторизацию и поиск допустимых расширений за одной границей ядра. Стандартные интеграции используют протокольные клиенты OIDC/OAuth и AuthZEN; адаптер владельца может заменить нужную часть. Брокер предоставляет сведения о правах и решения, а ядро применяет их. Командные расширения используют контракт ядра.

Название обозначает ответственность, а не обязательный отдельный сервер. Три роли могут использовать разные службы либо объединяться в одном шлюзе организации. Брокер не становится установщиком, исполнителем или реализацией всех защищаемых операций.

Простая основа и необязательные интеграции

Заголовок раздела «Простая основа и необязательные интеграции»

Rukh также поддерживает явно выбранную локальную политику и статический каталог без входа в организацию и внешних служб. ADR-0009 описывает эту основу и ведение каталогов, групп и правил как кода. Личность подтверждается только тогда, когда этого требуют выбранные правила или защищаемый ресурс. Локальный контекст без подтверждения личности не выдаётся за пользователя организации.

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

РольОтветственностьИнтеграция
Поставщик личностиАутентифицировать пользователя или явно поддерживаемую служебную учётную запись; вернуть проверенную личность и защищённые ссылки на учётные данныеКлиент OIDC, адаптер доменного входа или собственный адаптер личности
Поставщик решений о доступеРешить, допустимо ли действие над ресурсом для связанного контекста; предоставить сведения о допустимых действияхВстроенные локальные правила, клиент AuthZEN или собственный адаптер прав
Поставщик поиска расширенийСформировать ограниченный список допустимых расширений, связанных с доверенными сведениями каталогаСтатический каталог с локальными правилами, поиск ресурсов AuthZEN с привязкой к каталогу либо собственный адаптер поиска

Это логические интерфейсы за Security Broker, а не три обязательных процесса или полное описание SDK. Смена шлюза входа не требует замены проверки прав или поиска расширений. Один адаптер организации может выполнять несколько ролей, сохраняя их разный смысл. Успешный вход сам по себе не разрешает установку расширения или исполнение команды.

Владелец задаёт доверенное соответствие личности между ролями. Для OIDC личность определяется совместно издателем (issuer) и субъектом (subject), а не почтой или отображаемым именем. Личность из каталога также сохраняет ответственную сторону и устойчивый идентификатор. Сопоставление с идентификаторами пользователей существующей службы прав задаётся явно; совпадения отображаемого атрибута недостаточно. Правила идентичности OIDC.

УчастникЧто добавляет или выбирает
Владелец CLI / разработчик интеграцииРегистрирует поддерживаемые протокольные клиенты и собственные адаптеры, задаёт доверенные профили подключения и соответствия личности и действий
Пользователь CLIВыбирает разрешённый владельцем профиль и входит, если его правила требуют личности; добавляет профиль только в пределах правил настройки владельца
Автор расширенияОбъявляет область доступа, требования команд и запрашиваемые операции в описании расширения; вызывает опубликованные операции ядра

Подключение шлюза, совместимого со стандартом, выполняется настройкой. Владелец или уполномоченный пользователь создаёт профиль, использующий зарегистрированные реализации протоколов. Новый код адаптера добавляется как доверенная библиотечная зависимость и регистрируется при сборке своего CLI. Настройки профиля не загружают произвольный код. Командное расширение не может установить адаптер брокера, заменить правило прав или перенаправить проверки на свой сервер.

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

Состав профиля подключенияНазначение
Область доступа, идентификаторы зарегистрированных реализаций и версии контрактовВыбор известных обязанностей и совместимости
Доверенный издатель личности, client_id приложения, разрешённые способы входа, области OAuth и настройки перенаправленияНастройка общего клиента входа
Источник локальных правил либо служба прав с ожидаемым получателем токена API и защищёнными ссылками на учётные данныеВыбор ответственного поставщика; удалённые учётные данные нужны только выбранной службе, которая их требует
Разрешённые каталоги, пространства имён издателей и соответствия личности, действий и ресурсовСвязь данных о правах с реальными расширениями и защищаемыми операциями
Правила доверия адресам и сертификатам, включая разрешённый корпоративный центр сертификации при необходимостиПроверка соединений; получение метаданных не отключает TLS и не расширяет круг доверенных адресов

Таблица задаёт смысл, а не синтаксис настроек. Применяются только настройки выбранных реализаций; локальный каталог не требует клиента OIDC или адреса службы. Пользователь выбирает разрешённый профиль и при необходимости учётную запись; смена профиля не меняет правила владельца. Поддержка средств и конфликты соответствий проверяются до использования. Подтверждённый пользователь и служебная учётная запись самой интеграции различаются: служебные полномочия не заменяют личность пользователя при проверке его прав. Активные вызовы сохраняют связанные область и пользователя; выбор другой учётной записи не меняет эту связь.

Схема показывает ответственность, а не границы процессов. Загрузчик и проверки исполнения используют один контракт брокера.

Принятая граница интеграции Security Broker
Принятая граница интеграции Security BrokerВладелец CLI настраивает Security Broker из реализаций входа, проверки прав и поиска. Загрузчик и проверки доступа ядра используют общую границу. Расширения не выбирают поставщиков. Защищаемые службы ядра остаются отдельно.Владелец CLISecurity BrokerКомандное расширениеПроверки доступа ядраЗагрузчик расширенийOIDC, доменный илисобственный входЛокальные правила,AuthZEN или собственнаяслужбаСвязь каталога и правДоверенная служба ядраРегистрирует и настраиваетОбъявленные запросы ядруПоиск допустимыхрасширенийЗапросы действий и решенияЛичность при необходимостиРешения о доступеДопустимые ссылкиРазрешённая операцияПринятая граница интеграции Security BrokerВладелец CLI настраивает Security Broker из реализаций входа, проверки прав и поиска. Загрузчик и проверки доступа ядра используют общую границу. Расширения не выбирают поставщиков. Защищаемые службы ядра остаются отдельно.Владелец CLISecurity BrokerКомандное расширениеПроверки доступа ядраЗагрузчик расширенийOIDC, доменный илисобственный входЛокальные правила,AuthZEN или собственнаяслужбаСвязь каталога и правДоверенная служба ядраРегистрирует и настраиваетОбъявленные запросы ядруПоиск допустимыхрасширенийЗапросы действий и решенияЛичность при необходимостиРешения о доступеДопустимые ссылкиРазрешённая операция

Протокол выбирается по обязанности, а не названию продукта. Keycloak поддерживает стандартную интеграцию OIDC, поэтому для входа не нужны отдельный SDK Keycloak или его Admin API. Регистрация приложения у поставщика входа, включая client_id и разрешённые перенаправления, сохраняется: общий клиент убирает отдельный код для продукта, а не административную настройку. Поддержка протоколов Keycloak, регистрация обычного приложения.

Задача интеграцииВыбранный путьГраница
Интерактивный вход пользователяOIDC с Authorization Code и PKCE (S256), через внешний системный браузер и зарегистрированное перенаправление для приложенияCLI — публичный клиент; без встроенного общего секрета, передачи пароля через password grant или встроенной страницы входа
Вход без браузера на машине с CLIOAuth Device Authorization Grant, если настроенный поставщик его поддерживаетИспользуется разрешённый адрес подтверждения поставщика; личность подтверждается его поддерживаемым вариантом OIDC либо доверенным адаптером, а не наличием произвольного токена доступа
Корпоративный шлюз с OIDCТот же протокольный клиент с другим доверенным издателем и профилемAPI управления пользователями и группами конкретного продукта не требуется
Каталог или шлюз без OIDCФедерация через разрешённый организацией шлюз OIDC либо зарегистрированный адаптер доменного/собственного входаПодключение явно объявляет требования к платформе и аутентификации
Стандартный API правAuthZEN Authorization API 1.0 для решений о доступе и поддерживаемых средств поискаСоответствие личности и модель действий/ресурсов приложения задаёт владелец
Собственный API организацииАдаптер нужной роли либо серверная прослойка, предоставляющая выбранные стандартыЯдро и командные расширения сохраняют один контракт

Для браузерного входа используется временный приёмник на локальном интерфейсе с привязкой ответа к запросу; после завершения, отмены или превышения времени он закрывается. Проверяются разрешённые издатель и метаданные, state, связь PKCE, подпись, издатель, получатель, nonce и срок действия ID token. Сведения из токена принимаются только после проверки. Discovery сообщает адреса и ключи доверенного издателя, а не выбирает новую доверенную сторону. OAuth для обычных приложений, проверка OIDC, OIDC Discovery.

Вход по коду устройства соблюдает заданный сервером интервал опроса, ответы ожидания/замедления, срок действия и отмену. Это объявленный вариант, а не автоматический переход после ошибки другого способа. Токен доступа API предназначен для своей целевой службы; ID token не является учётными данными для API. Device Authorization Grant, правила безопасности OAuth.

Схема показывает подключение OIDC. Проверка личности предшествует решениям о доступе и сама по себе не возвращает список разрешённых команд. Ошибка или отмена на любом шаге прерывает обмен и освобождает временные ресурсы; последующие стрелки после этого сбоя не выполняются.

Принятый вход через стандартный протокол
Принятый вход через стандартный протоколЯдро использует разрешённый профиль и общий клиент OIDC. Пользователь входит через внешний браузер у поставщика личности. С областью доступа связывается только проверенная личность. Ошибка или отмена не создаёт контекст доступа.Доверенный поставщик личностиСистемный браузерЯдро и клиент OIDCПользовательДоверенный поставщик личностиСистемный браузерЯдро и клиент OIDCПользовательalt[Ответ корректен и вход не отменён][Сбой, неверная личность или отмена]Выбрать разрешённый профиль и войтиПроверяемое Discovery для заданного издателяМетаданные и поддерживаемые средстваЗапрос Authorization Code с PKCE и привязкой ответаАутентификация пользователяПеренаправление с кодом авторизацииЛокальный ответ, связанный с запросомОбмен кода с подтверждением PKCEОтвет с токенами или ошибкаПроверить и связать издателя, пользователя и областьВход выполнен, права проверяются отдельноЗакрыть приёмник и удалить незавершённый контекстОпределённая ошибка входаПринятый вход через стандартный протоколЯдро использует разрешённый профиль и общий клиент OIDC. Пользователь входит через внешний браузер у поставщика личности. С областью доступа связывается только проверенная личность. Ошибка или отмена не создаёт контекст доступа.Доверенный поставщик личностиСистемный браузерЯдро и клиент OIDCПользовательДоверенный поставщик личностиСистемный браузерЯдро и клиент OIDCПользовательalt[Ответ корректен и вход не отменён][Сбой, неверная личность или отмена]Выбрать разрешённый профиль и войтиПроверяемое Discovery для заданного издателяМетаданные и поддерживаемые средстваЗапрос Authorization Code с PKCE и привязкой ответаАутентификация пользователяПеренаправление с кодом авторизацииЛокальный ответ, связанный с запросомОбмен кода с подтверждением PKCEОтвет с токенами или ошибкаПроверить и связать издателя, пользователя и областьВход выполнен, права проверяются отдельноЗакрыть приёмник и удалить незавершённый контекстОпределённая ошибка входа

Active Directory — семейство служб каталога, а не протокол, альтернативный OIDC. Если организация предоставляет вход через службу федерации с OIDC, CLI использует стандартное подключение OIDC. AD FS — один из таких путей, когда его установленная конфигурация поддерживает нужный способ входа. Это не означает, что AD DS сам предоставляет адрес OIDC. Модель OIDC в AD FS.

Для прямой доменной интеграции адаптер владельца использует средства аутентификации платформы, например Kerberos через Windows SSPI или подходящую реализацию GSSAPI. Профиль задаёт личность целевой службы и разрешённый механизм входа; адаптер проверяет установленный контекст, а не доверяет переменной окружения или переданному имени пользователя. Если требуется Kerberos, Negotiate не должен незаметно переходить на NTLM. Поддержка объявляется для конкретного адаптера и платформы, а не обещается для любой сборки CLI. Windows SSPI и Negotiate.

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

Собственные службы без выбранных протоколов

Заголовок раздела «Собственные службы без выбранных протоколов»

Организация не обязана заменять существующую систему входа или прав. Два способа интеграции сохраняют одну границу ядра:

СпособЧто предоставляет организацияЧто меняется в CLI
Протокольная прослойкаДоверенная служба, переводящая существующие API в OIDC для входа и/или AuthZEN для прав, с нужной привязкой к каталогуРазрешённые настройки подключения; используются существующие реализации протоколов
Библиотечный адаптерДоверенная реализация только недостающей роли входа, прав или поиска через собственный API или библиотеку организацииВладелец регистрирует зависимость и собирает CLI; остальные стандартные роли сохраняются

Например, вход OIDC можно совместить с существующим внутренним API прав и разрешённым каталогом пакетов. Собственный код нужен только для соответствия прав. Полностью собственный шлюз может реализовать все три роли. Ни один вариант не требует изменения кода расширений или отдельного клиента брокера в каждом расширении.

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

Адаптер обязан аутентифицировать подключение к своей службе, проверять ответы, связывать личность с доверенной стороной, сопоставлять действия и ресурсы без расширения доступа, сохранять ошибки, отмену и обязательный аудит, а учётные данные держать в защищённом хранилище под управлением ядра. Он возвращает типизированные данные и ограниченные ссылки на учётные данные, а не произвольные сведения, которые вызывающая сторона объявила доверенными. Отсутствующая поддержка обозначается явно. Настройки могут выбирать разрешённые соответствия, но не служат произвольным сценарием или неограниченным HTTP-посредником от расширения.

Адаптер не может объявлять совместимость с OIDC/AuthZEN только потому, что возвращает похожий JSON. Выбранная реализация соблюдает требования протокола; собственные соответствия явно считаются нестандартными. Особенности продукта остаются внутри адаптера и не становятся обязательными полями общего контракта расширений.

AuthZEN разделяет решение для subject / action / resource / context и поиск допустимых ресурсов или действий. Rukh отображает в эту модель свой доверенный контекст. Вход OIDC, области OAuth и группы каталога не определяют автоматически права команд Rukh. Их соответствие задаёт владелец. AuthZEN Authorization API 1.0.

Адаптер объявляет поддерживаемые средства проверки и поиска. Ограниченный запрос действий можно выполнить проверкой известных кандидатов, если поиск не поддерживается; неполный перебор не может изображать полный каталог допустимых расширений. Поиск объединяет разрешённый набор записей каталога с проверкой прав либо связывает разрешённые результаты поиска с проверенными записями каталога. AuthZEN не предоставляет сведения о пакетах, проверку выпусков или формат каталога расширений Rukh.

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

Это обязательные логические типы запросов и результатов предлагаемого контракта адаптера, а не формат HTTP или IPC расширения. Библиотека может иначе назвать методы, сохранив поля и результаты. Контракт адаптера отделён от контракта служб, доступного расширениям по ADR-0002. Протокольные клиенты преобразуют ответы служб в эти типы; удалённая служба не обязана сама реализовывать поля Rukh.

ОбязанностьДанные от ядраРезультат
Связать контекст доступаРазрешённый профиль и доверенный контекст личностиСвязь области и пользователя, поддерживаемый контракт и средства; либо явная ошибка подключения или установления личности
Найти допустимые расширенияКонтекст доступа, ограниченный запрос и продолжение этого запросаСтраница ссылок на допустимые расширения и безопасных сведений для показа, с явным продолжением и признаком полноты; либо ошибка
Узнать допустимые действияКонтекст доступа и ограниченный набор объявленных пар «действие — ресурс»Сведения о разрешении для каждой пары, без выполнения действия и выдачи повторно используемого разрешения
Решить вопрос о защищаемом действииДоверенные пользователь и область, канонические расширение и выпуск, команда и вид вызова там, где они применимы, действие, ресурс и необходимые проверенные параметрыРазрешено, запрещено или решение не установлено; результат связан с запросом и выполнимыми ограничениями доступа

Каждый запрос содержит созданный ядром requestId, ID управляющего действия activityId, accessDomain, profileRevision, configRevision, доверенный principalBinding, предел времени и данные операции. configRevision — точный ownerConfigRevision из ADR-0007/0009, а не ещё один независимо меняющийся идентификатор. profileRevision указывает активную запись профиля, по которой допущен запрос. Эти версии закрепляют настройки клиента, но не означают, что удалённый каталог пользователей или служба прав перестали меняться.

Связь или результатОбязательные поля и смысл
Связь личностиkind: local / user / service; непрозрачный bindingId, принадлежащий ядру; для подтверждённой личности — устойчивый subject вместе с источником полномочий, регистрация проверившего поставщика личности и контекст её проверки. Локальный контекст не получает выдуманного подтверждённого субъекта.
Контекст доступаОбласть доступа, связь личности, выбранные регистрации и версии поставщиков, применимая версия конфигурации. Связывание не доказывает наличие прав или успех следующих запросов.
РешениеrequestId, configRevision, effect: allow / deny / indeterminate, ограниченный reasonCode и ограничения. Решение связано с точными действием, ресурсом и проверенными параметрами ядра и не подменяет их. Собственные policyRevision и ссылка на решение поставщика — необязательная диагностика; если поставщик их не сообщает, они явно отсутствуют.
Проверка списка действийОдин результат на каждый запрошенный ID пары, с тем же смыслом решения. Пропущенный ответ не считается разрешением. Ответ информационный, а не повторно используемое удостоверение или токен следующей операции.
ПоискrequestId, configRevision, consistency, ограниченный список записей, exhausted, необязательные continuation и версия источника. Их смысл определяют правила продолжения ниже.
ОшибкаТипизированный код, безопасная диагностика и связь с запросом. Ошибка отличается от deny; ни ошибка, ни indeterminate не допускают защищаемую операцию.

principalBinding составляет только ядро. Для OIDC источник и субъект — проверенные issuer и sub; для доменного или собственного адаптера регистрация определяет издателя/область и синтаксис устойчивого субъекта. ID субъекта сохраняется точно и различает регистр, если зарегистрированный источник сам не определяет и не проверяет каноническое представление. Почта, отображаемое имя и имя пользователя без источника не могут быть ключами личности. Пользователь и служба с одинаковым текстом ID остаются разными видами субъектов. Повторный вход, выход или смена учётной записи создают либо отменяют связь; прежний курсор или ответ не присоединяются к новой связи только из-за совпадения отображаемого имени.

Вызов закрепляет личность, сторону, подтверждающую права, и реализации служб по ADR-0002. Перед каждым новым защищаемым запросом ядро получает применимую текущую версию правил через активную запись профиля ADR-0007 и пересекает её с исходными ограничениями вызова. Совместимое обновление только правил может сужать или разрешать действия внутри этих исходных границ; оно не добавляет необъявленные операции, не меняет субъект и не заменяет закреплённую сторону или реализацию. Если переход конфигурации больше не допускает эти связи, запрос получает context_invalidated; новый вызов может использовать новые настройки. Старые разрешения не переносятся в другую область полномочий. Это правило выбора контекста, а не обязательного сетевого обращения или срока хранения решений.

Следующие значения по умолчанию ограничивают саму интеграцию. Владелец может задать другие конечные пределы в поддерживаемом реализацией диапазоне; команда или удалённый ответ не могут их увеличивать. Действует более ранний срок: этот предел либо оставшееся время управляющего действия.

ПределЗначение по умолчанию
Связывание доступа без интерактивного входа, решение или проверка списка действий10 секунд на запрос
Явный вход5 минут всего; срок поставщика и отмена могут завершить его раньше
Проверка списка действий100 пар; у каждой отдельный ID и известная схема действия/ресурса
Страница поискаПо умолчанию запрашиваются 50 записей, не более 200; не более 1 МиБ декодированного JSON в UTF-8
Одна последовательная выдача10 000 возвращённых записей, 60 секунд всего и не более 200 страниц; достижение предела сообщается явно и не означает полный снимок
Остальные нормализованные запросы/результатыНе более 256 КиБ декодированного JSON в UTF-8 каждый
КурсорНе более 4 КиБ; истекает через 5 минут либо раньше при завершении контекста/запроса
Читаемая причинаНе более 256 байтов UTF-8 для кода и 2 КиБ для безопасного объяснения; без токенов и сырых ответов службы

Размер проверяется для декодированного содержимого, а не только сжатой передачи. Клиенты удалённых протоколов также ограничивают заголовки, распаковку и перенаправления по разрешённому профилю подключения. Неизвестные обязательные поля результата, повторяющиеся ключи JSON, неверная связь ответов и невыполнимые ограничения дают invalid_response. Необязательные метаданные поставщика допускаются только через объявленную ограниченную точку расширения; адаптер не может назвать неизвестное требование безопасности необязательным.

Ядро проверяет контракты запросов и ответов и сохраняет собственную политику. Итоговый доступ не может выходить за пересечение правил владельца, прав пользователя, доверенной области расширения, объявления выбранной команды и ограничений вызова. Разрешение адаптера не отменяет эти границы. Неподдерживаемые обязательные ограничения, ответ на другой запрос или неустановленное решение не превращаются в разрешение.

Операция и действие в модели прав различаются: операция предоставляет средство, а действие выражает полномочие над ресурсом. Доверенная регистрация связывает операцию и её проверенные параметры с нужным действием и действительной целью. Произвольные имена действий, адреса и обозначения ресурсов от расширения не могут разрешить другую операцию. Устойчивые пространства имён и соответствия не дают одному издателю использовать полномочия другого; точный синтаксис идентификаторов относится к контракту описания.

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

Схема KCL должна выражать следующий смысл; её синтаксис — отдельный контракт:

ОбъявлениеЗначение
Область доступа и зависимость от брокераКакая назначенная владельцем сторона должна подтверждать права; поля не предоставляют доступ и не выбирают реализацию адаптера
Каноническая команда и вид вызоваИдентичность и отдельные области execute / describe, уже закреплённые ADR-0002
Запрашиваемые операции и действияИзвестные контракты, ограничения ресурсов и обязательное/необязательное использование; обязательная поддержка и обязательный доступ до запуска остаются разными требованиями

Публикация объявления не создаёт права в службе организации. Владелец или уполномоченный администратор делает модель действий и ресурсов известной интеграции и связывает пространство имён издателя. Неизвестные обязательные требования остаются неподдерживаемыми. Новое защищаемое средство требует доверенной регистрации службы; объявления в расширении недостаточно.

Расширение может передать ядру ограниченный список объявленных пар «действие — ресурс» и получить разрешённое подмножество либо определённую ошибку. Сам запрос подчиняется границам доступа и правилам раскрытия сведений. Он не позволяет перечислять чужих пользователей, произвольные права или скрытые расширения. Это помогает выбирать допустимое поведение или просить ядро показать подходящий интерфейс; права действовать такой ответ не даёт. Расширение также может попросить ядро выполнить объявленную операцию. При проверке доступа к ней ядро заново определяет действительные действие и ресурс и вызывает зарегистрированную службу только при разрешении.

Запрос допустимых действий необязателен: его не нужно делать перед каждой операцией. Проверки на границе ядра не предписывают удалённый запрос брокеру при каждом обращении. Правила пригодности решений о доступе и синхронизации — отдельное решение; расширение не может выбрать эту политику или обойти проверку.

Схема разделяет получение сведений и применение прав. Обращения к брокеру логические: стрелка не означает обязательный сетевой запрос.

Предлагаемые запрос действий и защищаемая операция
Предлагаемые запрос действий и защищаемая операцияРасширение может узнать права на объявленные действия через ядро. Ответ справочный. Последующая операция проходит отдельную проверку с доверенным контекстом и зарегистрированным соответствием действий; отказ, отсутствие подтверждения прав или завершение вызова предотвращают исполнение.Служба ядраГраница Security BrokerЯдро RukhРасширениеСлужба ядраГраница Security BrokerЯдро RukhРасширениеopt[Нужны сведения о допустимых действиях]alt[Разрешено, обязательный аудит выполнен и вызов активен][Нет подтверждения прав или вызов завершается]Объявленные пары действия и ресурсаПроверить область и раскрытие сведенийПроверить пары в доверенном контекстеРезультаты по парам или ошибкаОграниченные сведения, не разрешение действоватьОбъявленная операция и параметрыПроверить и определить действие и действительный ресурсРешение в доверенном контексте доступаРазрешено, запрещено или не установленоВыполнить ограниченную операциюРезультат или ошибка операцииОтвет на операциюОпределённая ошибка без исполненияПредлагаемые запрос действий и защищаемая операцияРасширение может узнать права на объявленные действия через ядро. Ответ справочный. Последующая операция проходит отдельную проверку с доверенным контекстом и зарегистрированным соответствием действий; отказ, отсутствие подтверждения прав или завершение вызова предотвращают исполнение.Служба ядраГраница Security BrokerЯдро RukhРасширениеСлужба ядраГраница Security BrokerЯдро RukhРасширениеopt[Нужны сведения о допустимых действиях]alt[Разрешено, обязательный аудит выполнен и вызов активен][Нет подтверждения прав или вызов завершается]Объявленные пары действия и ресурсаПроверить область и раскрытие сведенийПроверить пары в доверенном контекстеРезультаты по парам или ошибкаОграниченные сведения, не разрешение действоватьОбъявленная операция и параметрыПроверить и определить действие и действительный ресурсРешение в доверенном контексте доступаРазрешено, запрещено или не установленоВыполнить ограниченную операциюРезультат или ошибка операцииОтвет на операциюОпределённая ошибка без исполнения

Для расширений, зависящих от брокера, загрузчик получает список допустимых расширений через Security Broker. Адаптер обязан предоставлять этот способ поиска, даже если API прав организации сам не умеет искать по каталогу. Внутри он может объединять разрешённый каталог со сведениями о правах; загрузчик не должен заменять отсутствующий ответ брокера полным каталогом без фильтрации.

Запись списка должна определять ответственное пространство имён и расширение, его область доступа, ограничения выпусков, если они есть, и ссылку на разрешённый каталог, достаточную для разрешения записи загрузчиком. Безопасные сведения для показа необязательны. Точный формат выпуска и каталога относится к отдельному контракту загрузчика. Одного имени или произвольного адреса загрузки недостаточно для доверенной установки. Возвращение ссылки на источник не даёт адаптеру неограниченных сетевых полномочий.

Загрузчик проверяет доверие к источнику, целостность выпуска, совместимость и правила владельца дополнительно к допустимости по брокеру. Содержимое он получает через собственные разрешённые интеграции источников. Security Broker участвует в загрузке через этот контракт, а получение файлов, проверка, установка, обновление и активация остаются обязанностями загрузчика.

Схема показывает границу, которую должен сохранить загрузчик, без выбора хранилищ и протоколов источников.

Принятый поиск допустимых расширений для загрузчика
Принятый поиск допустимых расширений для загрузчикаЗагрузчик запрашивает допустимые расширения через Security Broker, разрешает ссылки только через доверенные источники и применяет собственные проверки. Отсутствие сведений брокера означает ошибку, а не полный каталог. Поиск не требует кода расширения или его среды.Разрешённый источникГраница Security BrokerЗагрузчик расширенийРазрешённый источникГраница Security BrokerЗагрузчик расширенийalt[Корректная страница для этого контекста][Ответ отсутствует, неверен или недоступен]Допустимые расширения для доверенного контекстаСсылки на расширения, ограничения, продолжениеПолучить описания по разрешённым ссылкамОписания и идентичность выпускаПроверить идентичность, доверие и совместимостьПоказать допустимые записи и полноту результатаОшибка поискаСообщить об ошибке без расширения спискаПринятый поиск допустимых расширений для загрузчикаЗагрузчик запрашивает допустимые расширения через Security Broker, разрешает ссылки только через доверенные источники и применяет собственные проверки. Отсутствие сведений брокера означает ошибку, а не полный каталог. Поиск не требует кода расширения или его среды.Разрешённый источникГраница Security BrokerЗагрузчик расширенийРазрешённый источникГраница Security BrokerЗагрузчик расширенийalt[Корректная страница для этого контекста][Ответ отсутствует, неверен или недоступен]Допустимые расширения для доверенного контекстаСсылки на расширения, ограничения, продолжениеПолучить описания по разрешённым ссылкамОписания и идентичность выпускаПроверить идентичность, доверие и совместимостьПоказать допустимые записи и полноту результатаОшибка поискаСообщить об ошибке без расширения списка

Поиск не готовит среды, не загружает исполняемый код интеграций из пакета и не запускает обработчики расширения. Он работает до установки расширения. Установка самого адаптера брокера не может зависеть от поиска через этот же ненастроенный адаптер.

Необходимую область доступа связывают правила владельца и проверенные сведения источника, а не только заявление пакета. Описание расширения может добавлять требования; их отсутствие или изменение не снимают требование брокера, заданное владельцем. Загрузчик сохраняет эту связь при получении того же расширения из другого источника и при обновлении выпуска.

Право видеть расширение не разрешает все его команды и операции и не доказывает, что выбранный выпуск доверенный или пригоден к установке. Установка и активация сохраняют собственные проверки, а исполнение — проверки ADR-0002. Уже установленная копия не обходит свою зависимость от брокера. Конфликт идентичности, смена области или неразрешённый источник не могут незаметно считаться тем же разрешённым выпуском.

Согласованность поиска и продолжение выдачи

Заголовок раздела «Согласованность поиска и продолжение выдачи»

Успешный пустой ответ означает отсутствие подходящих допустимых записей по правилам выбранной согласованности. Неполный ответ остаётся неполным; ошибка не означает успешный пустой каталог. Каждый профиль подключения объявляет допустимые режимы поиска, а каждый ответ — выбранный режим. По умолчанию используется snapshot; разрешение live — явный выбор владельца, а не восстановление после сбоя снимка.

РежимОбязательная гарантия
snapshotВыдача закрепляет содержимое каталога и все данные о правах, которыми она ограничена. Все страницы относятся к тем же версиям и связи личности. Локальный поставщик каталога/групп/правил реализует этот базовый вариант по одной неизменяемой версии конфигурации. Удалённый адаптер заявляет его только при возможности сохранить нужные версии источников либо безопасно подготовить ограниченный результат.
liveКлиентские configRevision, область, связь личности и нормализованный запрос неизменны, но настроенный внешний источник может меняться между страницами. Адаптер сообщает, что добавления, удаления и изменения прав могут повлиять на выдачу. exhausted: true означает, что источник завершил эту выдачу, а не вернул единый полный снимок на некоторый момент времени.

Один неизменный хеш каталога не доказывает наличие снимка, если права проверяет меняющаяся служба. И наоборот, согласованный снимок поиска не разрешает последующую установку или исполнение: у этих действий собственные проверки. Профиль, требующий снимка, получает snapshot_unavailable, если поставщик не может его сохранить; адаптер не переключается на live и не начинает выдачу заново посреди результата незаметно.

Подготовка сохранённого результата — способ хранения, а не усиление согласованности. Она даёт снимок только тогда, когда собранные каталог и сведения о правах относятся к сохранённым версиям либо согласованному снимку источника. Сохранение результатов последовательных проверок меняющейся политики live не превращает их в snapshot.

В снимке записи упорядочены по канонической идентичности расширения и точной идентичности выпуска, если перечисляются выпуски; каждая каноническая запись встречается один раз. Поставщик live сообщает порядок и устойчивый ключ записи, а адаптер удаляет одинаковые повторы ключей в пределах ограниченной выдачи. Повтор ключа с противоречащими данными даёт invalid_response. Режим live не обещает включить записи, добавленные позади уже пройденного курсора.

При exhausted: true токена продолжения быть не должно. При exhausted: false требуется пригодное продолжение либо типизированная ошибка неполного результата; адаптер не может просто пропустить остаток. Пустая промежуточная страница допустима только с продвижением к другому продолжению. Повтор курсора без продвижения даёт invalid_response. Уже показанные записи после дальнейшей ошибки остаются явно неполными; ошибка не превращает их в полный снимок и не начинает установку.

Продолжение непрозрачно и связано с accessDomain, principalBinding.bindingId, configRevision, регистрацией поставщика, выбранным режимом согласованности, нормализованным запросом, порядком и пределом размера страницы. Продолжение снимка также связывает все версии источников. Ядро/адаптер проверяет эту связь по защищённому локальному состоянию или проверяемому содержимому курсора; редактируемые поля курсора не являются источником полномочий. Курсор удалённого поставщика остаётся внутри этой связи. Курсоры не содержат общих учётных данных API и не разрешают операции.

Смена конфигурации, отмена связи личности или замена поставщика делает прежнюю выдачу непригодной и возвращает context_invalidated. Истечение срока даёт cursor_expired, неверный или чужой курсор — invalid_cursor. Вызывающая сторона может явно начать новый запрос чтения, не объединяя его страницы с прежним результатом. Установка и другие внешние действия автоматически не повторяются. Если поставщик не может удержать снимок в выделенных пределах, он возвращает limit_exceeded или snapshot_unavailable; усечённая страница не доказывает полноту.

УсловиеОбязательное поведение
Нет необходимой привязки брокера, нужного средства или обязательное действие неизвестноЯвная недоступность или отсутствие поддержки; без замены разрешающей локальной политикой
Доступ запрещёнЗащищаемая операция не передаётся на исполнение; только безопасное объяснение
Решение не установлено или ответ неверенРазрешения нет; отличие от отказа по правилам сохраняется
Не совпали пользователь/область или подменён контекстОтклонить запрос или ответ; не применять его к другой учётной записи, расширению или вызову
Отмена, предел времени или завершениеПрекратить допуск новых действий; поздние ответы о правах не запускают операции, правила окончательного результата сохраняются

Коды ошибок адаптера: invalid_request, invalid_response, authentication_required, context_invalidated, unsupported, unavailable, deadline_exceeded, cancelled, limit_exceeded, invalid_cursor, cursor_expired и snapshot_unavailable. Требование входа — явный результат: оно не открывает браузер скрыто и не подставляет локального субъекта. Внутри вызова это ошибки операций по ADR-0002, а не новые коды окончательного результата. Обязательные проверки до запуска и обязательный аудит сохраняют свои более строгие последствия. Диагностика различает запрет по правилам и невозможность установить решение, оставаясь безопасной для раскрытия.

Локальные права для средств CLI, не зависящих от брокера, остаются возможны по ADR-0002. Это не запасной путь при сбое необходимой интеграции брокера. Выбор другого профиля не снимает проверенное требование брокера. Объединение нескольких независимых сторон, принимающих решения, находится вне этого ADR; неявного правила «разрешил хоть один брокер» нет.

Ядро записывает решения и наблюдаемые результаты из доверенного контекста по требованиям аудита ADR-0002. Журнал расширения не заменяет эти сведения. Общие учётные данные входа и реестра расширениям не передаются. Выдача ограниченных учётных данных или защищаемое действие в службе компании при необходимости выполняются отдельной зарегистрированной службой ядра; разрешение не является учётными данными или доказательством выполненного действия.

Как и в ADR-0001, обычный дочерний процесс не изолирован от ОС. Эта граница управляет загрузчиком и действиями через ядро. Внешние службы обязаны проверять свои права; интеграция не мешает расширению использовать уже имеющийся доступ к ОС. Отмена или потерянный ответ не разрешают автоматический повтор внешнего действия.

Уточнение: привязка клиентов к задаче и обеспечиваемая политика — 2026-09-24

Заголовок раздела «Уточнение: привязка клиентов к задаче и обеспечиваемая политика — 2026-09-24»

Модель команд и адаптер MCP открывают те же зарегистрированные операции; MCP — точка входа, а не второй брокер или источник прав. Ядро создаёт и существующую привязку субъекта principalBinding, и привязку запрашивающего участника actorBinding по ADR-0014. Основанием второй служит доверенный контекст запуска, транспорта и источника полномочий. Имя клиента, MCP clientInfo, текст модели или переданный расширением ID пользователя не могут её установить. Служебная учётная запись подключения к брокеру остаётся третьей отдельной ролью.

Для запроса в рамках задачи доверенный контекст брокера также сохраняет taskId, taskAuthorityRef, taskEpoch, actorBinding и проверенные ограничения задачи. Текст цели служит диагностике, а не политике на естественном языке. Ядро получает полномочия из утверждённого набора правил, согласия уполномоченного человека или зарегистрированного источника независимо от запрашивающего агента. Выдача из локального набора не требует OIDC, JWT или удалённого брокера. Разрешение поставщика не расширяет текущие права владельца/субъекта, область любой задачи-предка и текущей задачи, пределы расширения/команды или фиксированные ограничения вызова.

Адаптер передаёт только доверенный контекст, необходимый выбранному контракту прав. Поставщик, не способный оценить обязательное ограничение, возвращает unsupported или непригодное решение, а не неограниченное разрешение. Правила источников, назначений и сочетаний действий обеспечиваются только там, где такой контроль предоставляют зарегистрированные операции или выбранный профиль исполнения. ADR-0015 отделяет явное открытие доверенного нативного кода от более сильной изоляции. Готовый набор машинного доступа не доказывает наличие песочницы.

Актуальность решения по-прежнему подчиняется ADR-0012. Привязки задачи и участника повторно проверяются при окончательном допуске вместе с общим резервом из ADR-0014 и фиксацией эффекта из ADR-0016. Предшествующий поиск, справочный запрос прав, действительные API-учётные данные или записанное разрешение не обходят эти проверки и не повторяют неопределённый эффект. Простая локальная конфигурация не требует удалённой системы.

Дополнительные проверки реализации не выполнялись: вызвать одну операцию через CLI и MCP, подделать поля участника/задачи, подменить субъекта служебной учётной записью брокера, отозвать предка во время ожидания решения и запросить ограничение, которое нативная граница не обеспечивает. Во всех случаях сохраняются прежние типизированные ошибки и исходы вызова.

  • Совместимые со стандартами шлюзы подключаются профилями вместо отдельных клиентов продуктов. Регистрация приложения и соответствия прав остаются обязанностями организации.
  • Вход, проверка прав и поиск заменяются независимо. Собственная служба подключается через адаптер нужной роли или протокольную прослойку, без изменений командных расширений.
  • Загрузчик получает источник поиска с учётом прав и сохраняет свою ответственность за доверие к содержимому и его жизненный цикл.
  • Обычному API проверки прав может потребоваться дополнительное соответствие каталогу внутри адаптера. Это явная работа по интеграции, а не предполагаемое свойство любого внешнего брокера.
  • Объявления KCL, форматы загрузчика, подробное хранение учётных данных и правила пригодности решений о доступе имеют отдельные контракты. Выбор протоколов здесь не определяет правила связи и синхронизации и не означает готовых реализаций.

Решение принято владельцем проекта 2026-09-23. Следующий перечень сохраняется как обязательная проверка реализации, а не условие, уже выполненное при принятии.

Для проверки реализации рассмотреть границу и проверить небольшую эталонную интеграцию:

  1. Использовать одну реализацию OIDC с двумя независимо настроенными поставщиками. Проверить связь издателя и пользователя, проверку ответов и токенов, обязательный PKCE, разделение профилей и поддержку входа по коду устройства без SDK продуктов.
  2. Совместить стандартный вход с собственным API прав, затем проверить полностью собственную интеграцию личности и поддерживаемый доменный адаптер. Сохранять личность пользователя отдельно от служебных учётных данных; отклонять подменённые атрибуты, неподдерживаемые механизмы и конфликтующие соответствия.
  3. Находить допустимые расширения до установки без исполнения пакетов. Проверить поставщиков snapshot и явно разрешённого live, смену версий/учётных записей, истечение курсора, повторяющиеся записи и пределы выдачи. Различать пустой, неполный и ошибочный ответы; отклонять страницы другого контекста и неразрешённые источники. API прав без поиска не должен незаметно терять или расширять смысл каталога либо ослаблять требуемую согласованность.
  4. Узнавать объявленные действия и запрашивать операцию через общую границу ядра. Справочные ответы, необъявленные действия и подменённые ресурсы не обходят проверку операции. Отказ, отмена и сбой обязательного аудита не расширяют доступ, не допускают позднего исполнения или повтора действия.
  5. Проверить статический каталог с явной локальной политикой, затем добавить подтверждение личности и заменить проверку внешней службой. Сохранить контракты расширений и обязательные привязки полномочий; отсутствие удалённого решения не включает публичный вариант.

Эти проверки не запускались для ADR-0005. Заглушки брокера ADR-0002/0003 не подтверждают совместимость протоколов, доменную поддержку или этот контракт регистрации и поиска. Владелец принял архитектуру 2026-09-23; перечисленные проверки остаются обязательствами реализации.

Диаграмма

Перетаскивайте схему · + / − — масштаб · 0 — целиком · Esc — закрытьПеремещайте и увеличивайте схему двумя пальцами

100%