Переход на вход через identity
Актуально для: identity после 0.36, координатор с настройкой platform_token · Проверено: 01.10.2026
Это регламент для оператора установки. Решение описано в ADR-0047 §8a: токены, которые
принимают все сервисы SimpleTwo, выпускает identity. Сегодня сессию человеку выдаёт
координатор (токен HMAC на общем секрете ST_TOKEN_SECRET); после переключения координатор
из пути входа уходит и остаётся хозяином парка и ролей (RBAC).
Переключатель один — настройка координатора platform_token, значения hmac (по умолчанию)
и identity. Пока он в hmac, ничего из описанного ниже не действует.
Переключатель сам проверяет пять условий и не включится, пока они не выполнены. Остальные условия — выпуск приложений со входом через identity, учётные данные служебных ботов, передача заданий каталога, решение о назначениях — в списке проверок ниже: пройдите его целиком.
1. Что меняется
Для людей. Вход — только на странице identity, в системном браузере: Safari-окно
(ASWebAuthenticationSession) на iOS и macOS, Custom Tabs на Android, обычная вкладка для
веб-клиента. Приложение пароль больше не видит. Пароль, второй фактор, ключ доступа,
подтверждение на телефоне, коды по почте, сброс пароля — всё на одной странице identity.
Если организация входит через свой ADFS, Entra или Keycloak, страница identity переадресует
туда. В момент переключения каждый войдёт заново один раз: приложение скажет «войдите
снова» и откроет страницу identity. Дальше вход держится так же, как сегодня: ток ен живёт
12 часов и продлевается у identity, а если identity недоступна, уже вошедший продолжает работать,
пока сервис не перестал слышать ленту отзыва: если сервис не читал её дольше предела (10 минут по
умолчанию, Settings → «Вход через identity»), он отклоняет токены, выписанные раньше этого предела, —
такой токен мог быть отозван незаметно для сервиса. Токен, выписанный после, проходит.
Выход из системы, «Это был не я», сброс пароля, «выйти везде» и блокировка учётной записи теперь действуют во всех сервисах сразу: у человека одна сессия, и её конец за 30 секунд доходит до чата, календаря, почты и консоли.
Для администраторов.
- В консоль координатора (
/admin) входят через identity. Локальный вход консоли, карточка SSO и локальные пароли пользователей координатора уходят. Единственный локальный вход, который остаётся, — учётная запись экстренного доступа (break-glass) по адресу/admin/breakglass. - Люди, группы, членство, политика входа, домены входа, корпоративные провайдеры, гости, боты,
LDAP и HRMS ведутся в консоли identity (
identity_url/admin). В консоли координатора остаются парк, роли и привязка «группа → роли». - Роли по-прежнему назначаются в консоли координатора и действуют сразу: в токене ролей нет, каждый сервис спрашивает координатора, что человеку можно, и обновляет ответ каждые 15 секунд.
Для гостей. Гость — учётная запись identity с ответственным (пригласившим сотрудником). Приглашение, продление, отзыв и код восстановления в приложении работают как прежде, но выполняет их identity. Гость входит на странице identity, как все. Ссылка-приглашение на встречу или в чат — не учётная запись и не меняется.
Для ботов и интеграций.
- Рабочий бот (бот поддержки, рассылки, интеграции) получает токен у identity по
client_credentials,client_id=bot:[имя бота], с ключом (private_key_jwt) или секретом. Непрозрачный токенbot_…от messaging в режимеidentityотклоняется. - Ассистент, чей мозг работает на устройстве владельца, получает токен обменом токена владельца (RFC 8693); ничего делать не нужно — это делает обновлённое приложение владельца.
- У каждого бота есть владелец. Владелец отключён или удалён — его боты и ассистенты отключаются вместе с ним (кроме системных ботов организации: их консоль помечает).
- Протокольные входы (SMTP, JMAP, CalDAV, CardDAV, WebDAV, LDAP) — по паролям приложений identity. Пароли CalDAV календаря и токен сессии вместо пароля в CardDAV уходят.
- Сторонние приложения, которые уже входят через identity по OIDC, SAML или LDAP, ничего не замечают.
2. Проверки перед переключением
Переключатель сам отказывает (409 со списком), пока не выполнены первые пять пунктов и часть пункта 7, касающаяся ботов самой платформы. Остальное он не проверяет — это проверяет оператор.
Ниже $S2 — публичный адрес координатора (https://s2.example.com), $ID — публичный адрес
identity (https://id.example.com), $ADMIN_TOKEN — токен консоли координатора с правом
settings:read/settings:write, $ID_TOKEN — токен консоли identity администратора identity.
Консоль координатора → Settings → к арточка «Вход через identity» показывает оба переключателя
(platform_token и service_token) и всё, что мешает каждому, со ссылкой туда, где это
исправляется; третьим — переключатель CalDAV и CardDAV (dav_auth). То же одним запросом — он показывает все проверки переключателя сразу:
curl -fsS "$S2/admin/api/settings/platform-token" -H "Authorization: Bearer $ADMIN_TOKEN" | jq
Ответ: mode, issuer, identity_issuer_on, pinned_keys, pinned_at, door,
blockers (пустой список — можно переключать), error, remaining.
| # | Условие | Как проверить |
|---|---|---|
| 1 | identity развёрнута и отвечает по публичному имени | Консоль координатора → Settings → карточка Identity: имя, способ доступа (direct/nat), во что разрешается, «announced». curl -fsS "$ID/healthz" с обычной проверкой TLS. Документ обнаружения curl -fsS "$S2/.well-known/simpletwo.json" содержит identity_url. Блокер: identity is not deployed with a public name. |
| 2 | У identity включён выпуск токена платформы (platform_issuer: on) | curl -fsS "$ID/control/platform-issuer" -H "Authorization: Bearer $ID_TOKEN" → {"mode":"on"}. Включить: тот же адрес, PUT с {"mode":"on"} (аудит platform_issuer.set). В $ID/healthz — platform_issuer.mode: on. То же в консоли identity → Политики → «Выпуск токена платформы». Блокер: identity's platform issuer is off. |
| 3 | Ключи identity закреплены в желаемом состоянии | pinned_keys ≥ 1 и свежий pinned_at (координатор забирает JWKS раз в 5 минут). Блокер: identity's keys are not pinned yet. |
| 4 | Задан публичный адрес координатора | Settings → публичный адрес. Без него сервисы не дотянутся до проекции RBAC. Блокер: no public URL: …. |
| 5 | Учётная запись экстренного доступа заведена и проверена | Settings → «Break-glass account»: состояние «active». Заводит владелец (пароль от 12 символов + TOTP; замена ждёт первого кода). Проверить вход: открыть $S2/admin/breakglass, войти паролем и кодом, убедиться, что консоль открылась, выйти. В журнале аудита — breakglass.signin, у владельцев и администраторов — сообщение от бота поддержки. Пароль и генератор кодов хранить там, куда дежурный дотянется без платформы. Блокер: no break-glass credential is enrolled. |
| 6 | Установлены клиенты, которые входят через identity — iOS, macOS, Android, веб | Выпуск приложений с входом через системный браузер (п. 7) и выпуск координатора со страницей входа веб-клиента и консоли. Доля обновившихся: консоль координатора, список устройств — платформа и версия приложения у каждого устройства (см. Клиенты, «Наблюдение за парком»). Кто не обновился, после переключения не войдёт, пока не обновится. |
| 7 | У рабочих ботов есть учётные данные identity | Консоль identity → «Боты»: у каждого бота есть активный владелец и ключ или секрет; у бесхозных — передать владельца. Сам бот уже берёт токен у identity: POST $ID/oauth/token с grant_type=client_credentials отвечает токеном (до переключения его не принимает ни один сервис — это нормально). Боты самой платформы переводятся сами, это проверяет переключатель: входит только бот поддержки каждого случая поддержки (бот приветствия пишет через автоматизации messaging, карточки календаря пишет ассистент по служебному токену календаря, MCU ходит со своим ключом моста — им учётные данные не нужны). Агент на хосте поддержки, как только развёрнута identity, сам создаёт ключ бота (/var/lib/simpletwo/bot-key, закрытая часть хост не покидает), координатор регистрирует открытую часть в identity, и с переключением бот берёт токен у identity по client_credentials. Владелец такого бота — администратор, который провёл настройку поддержки; бот системный и при уходе владельца не отключается, консоль identity предлагает передать владельца. Проверка: у бота поддержки в консоли identity → «Боты» ест ь ключ; в желаемом состоянии хоста поддержки есть bot_key_kid. Если нет — в отчётах узла поддержки ошибка platform bot key: …. Блокер: platform bots without identity credentials: … со списком ботов и случаев поддержки. |
| 8 | Задания каталога переданы на identity | Консоль координатора → Settings: карточки LDAP, «Directory photos (AD / LDAP)» и «SimpleOne (HRMS)» говорят «managed on identity» со ссылкой. В консоли identity → «Каталог» видны подключение, отметки и последние результаты проходов групп, людей и фотографий. Если карточка говорит, почему передачи не было (identity нет или она старше двери передачи), — сначала обновить identity и messaging, потом координатор. |
| 9 | Решение по назначению доступа (provisioning) | Консоль identity → Политики → «Доступ к SimpleTwo». Для действующей установки при переключении безопаснее одно из двух: оставить выключенным (все во всех сервисах, как сегодня) или включить с флажком «Всем — сообщения и календарь». Включать «только по назначению» без флажка — значит отозвать чат и календарь у всех, кому ничего не назначено. Подробно: Доступ к SimpleTwo. |
| 10 | Домены в хода и корпоративный провайдер настроены в identity | Консоль identity → домены входа: у каждого домена, с которым люди входят, правильный владелец — identity или провайдер. Провайдер (ADFS, Entra, Keycloak, SAML) заведён в identity и проверен входом тестовой учётной записи на $ID. Карточка SSO координатора после переключения не работает. См. Домены входа, ADFS, SAML. |
| 11 | Пара узлов identity, если установке она нужна | После переключения identity на критическом пути: без неё никто не войдёт заново (вошедшие работают до 12 часов). Для установки, которой это неприемлемо, — второй узел и реплицируемая база до переключения. На 30.09.2026 не сделано: вопрос ниже. |
| 12 | Служебные токены на ключах (service_token: keys, п. 4) | На 30.09.2026 не вышло. До выхода служебные токены сервисов подписываются общим секретом, и ST_TOKEN_SECRET после переключения удалить нельзя. |
Дополнительно, перед окном:
- все сервисы (messaging, calendar, mail, identity) на выпусках с новой дверью: в
/healthzкаждого есть полеplatform_tokenсо значениемmode: hmac; - учётные записи, которых нет в identity: консоль координатора → Identity → расхождение («accounts here with no home on identity»), при необходимости — «write missing accounts». Учётная запись без записи в identity после переключения не войдёт.
3. Переключение
Порядок
-
Объявить окно: людям — «в [время] приложение попросит войти заново», дежурному — канал связи вне платформы.
-
Пройти список раздела 2;
blockersпуст. -
Держать открытой вторую сессию консоли — экстренный вход в отдельном окне (
$S2/admin/breakglass), на случай если вход через identity не заработает. -
Переключить: в консоли — карточка «Вход через identity» → «Перейти на identity…», затем ввести слово
identity; или запросом:curl -fsS -X PUT "$S2/admin/api/settings/platform-token" \
-H "Authorization: Bearer $ADMIN_TOKEN" -H 'Content-Type: application/json' \
-d '{"mode":"identity"}' | jqОтвет — то же представление, что у
GET, сmode: identityиdoor: identity. Перед сохранением координатор заново забирает ключи и спрашивает identity, включён ли выпуск, — прошлым проверкам он не доверяет. Если что-то не так — 409 с{"error": "the platform token cannot be switched to identity yet", "blockers": [...]}, ничего не меняется:Блокер Что сделать identity is not deployed with a public nameп. 1 — DNS, сертификат, «announced» на карточке Identity identity's platform issuer is off (Identity → platform-issuer)п. 2 — PUT /control/platform-issuer {"mode":"on"}identity's keys are not pinned yetп. 3 — подождать до 5 минут или смотреть errorв ответеno public URL: the services cannot reach the RBAC projectionп. 4 no break-glass credential is enrolledп. 5 В аудите координатора —
platform_token.setсо значениемidentity.
Что происходит в эт от момент
- Координатор переключается сразу, по своей настройке. Его двери (приложения, консоль)
принимают только токен identity; каталог по CardDAV — пароль приложения identity с областью
carddavвместо токена сессии. Вход паролем (/v1/auth/login), обновление (/v1/auth/refresh), возврат SSO и локальный вход консоли отвечают «люди входят через identity». Сессия HMAC человека отклоняется с кодомsign_in_through_identity. - messaging, calendar, mail, identity получают новое желаемое состояние
(
ST_PLATFORM_TOKEN=identity, адрес выпускающего, закреплённые ключи, адреса ленты отзыва и RBAC), перерисовывают окружение и перезапускаются. Агент опрашивает координатора раз в минуту — 1–2 минуты на хостах работает старый режим, пока не перезапустятся. Сервис в режимеidentity, которому не хватает выпускающего, ключей, ленты или RBAC, не стартует — это видно в «Servers & deploys». - Документ обнаружения объявляет
platform_token: identity,platform_issuerиplatform_client_id: "simpletwo". Приложения по нему переходят на вход через браузер. - Каждый сервис начинает читать ленту отзыва identity каждые 30 секунд и проекцию RBAC координатора каждые 15 секунд. Пока RBAC не прочитан ни разу, сервис отказывает во всём, что требует права.
Остаются на старом пути до п. 4 и п. 8: служебные токены сервисов, помещения, сессия бота у
координатора, чат-доступ гостя встречи по ссылке. Гость, чей токен выписан до появления в нём
признака knd, войдёт заново.
Что увидят люди
- Одно сообщение «войдите снова» в каждом приложении при первом запросе после переключения.
Приложение не повторяет запрос в цикле: код
sign_in_through_identityозначает «войти один раз». Вход — на странице identity; для организации с корпоративным провайдером — переадресация к нему. - Кто не обновил приложение, увидит ошибку входа: старое приложение не умеет входить через браузер. Ответ — обновить.
- Звонок, начатый до переключения, может оборваться при переподключении, когда его сервис перезапустится.
Первый час
Смотреть каждые несколько минут:
/healthzкаждого сервиса (координатор, messaging, calendar, mail, identity) — полеplatform_token:mode: identity,issuer— ровно публичный адрес identity;revocations.cursorрастёт или стоит,revocations.last_ok— не старше минуты,revocations.errorпуст,revocations.stale: false(stale_after— предел, по умолчанию10m0s; приstale: trueсервис отклоняет токены старше предела);rbac.loaded: true,rbac.last_ok— не старше 30 секунд,rbac.errorпуст;- у координатора
door: unavailableвместо набора полей — он не может проверять токен identity; смотретьerrorвGET /admin/api/settings/platform-token.
- identity
/healthz—platform_issuer: {mode: on, feed_head};feed_head— голова ленты отзыва, курсоры сервисов должны её догонять. - Аудит identity — поток
platform.token(выпуск токена платформы, по одному на вход и обновление) растёт по мере того, как люди входят; входы и отказы — в журнале входов (Последние входы). - Аудит координатора —
platform_token.set; любойbreakglass.signin— это сигнал, что кто-то не смог войти через identity. - Доля вошедших: список устройств координатора и журнал входов identity; к концу часа большинство активных устройств должно войти.
- Ошибки у сервисов: всплеск 401 на messaging и calendar в первые минуты — ожидаемые «войдите снова»; 403 на действиях, требующих прав, — признак того, что RBAC не читается.
Проверить сценарием, а не одним /healthz: вход на iOS, Android, macOS и в веб-клиенте;
сообщение на второе устройство; событие календаря; письмо через JMAP; вход в консоль
координатора через identity; «выйти везде» у тестовой учётной записи — через 30 секунд
отказывают все её устройства.
4. Откат
Возврат всегда разрешён и ничего не проверяет:
curl -fsS -X PUT "$S2/admin/api/settings/platform-token" \
-H "Authorization: Bearer $ADMIN_TOKEN" -H 'Content-Type: application/json' \
-d '{"mode":"hmac"}'
Если консоль через identity не открывается — войти экстренной учётной записью
($S2/admin/breakglass): её сессия открывает консоль в обоих режимах.
Что сохраняется. Всё, что хранит identity: учётные записи, группы, сессии identity, журнал отзыва (он пишется в обоих режимах), назначения доступа, гости и боты identity, переданные задания каталога. Сессии и токены обновления координатора не удалялись — удаляются только после стабильного периода (раздел 5).
Что увидят люди. Ещё раз «войдите снова»: документ обнаружения снова говорит hmac,
приложения возвращаются к прежнему входу, а токен identity сервисы в режиме hmac не
принимают. Сессия, сброшенная приложением при переключении, не вернётся — войти придётся
заново.
Где откат не полный (проверить до переключения, см. вопросы ниже):
- бот, пересозданный с
credential: platform, лишился непрозрачного токена — вhmacон не войдёт, пока ему не выпустят новый токен в консоли координатора; - гость, приглашённый через identity в режиме
identity, — у координатора есть его проекция, но пароля для старого входа может не быть; - после удалений раздела 5 отката нет.
5. После стабильного периода
Удаления из ADR-0047 §8a, каждое — отдельный выпуск. Их порядок: сначала то, от чего никто не зависит, последним — общий секрет.
- Токен сессии HMAC человека: выдача и проверка у координатора, messaging, calendar, mail,
identity; двери продления
/v1/auth/renewдля людей. - Токены обновления координатора (
/v1/auth/refresh, их таблица). - Пути входа через координатора:
/v1/auth/login,/v1/auth/passkey/*, возврат SSO, локальный вход консоли/admin/api/login, карточка SSO, локальные пароли пользователей. Остаётся/admin/breakglass. - Копия заданий каталога у координатора (решение владельца 30.09.2026: уходит с
переключением):
ldapphoto,ldapgroups.go,ldappeople.go,avatarsync.go,hrms.go,integration.go, их карточки, настройки и запасной путь передачи. Единственный читатель LDAP —ldapdiridentity. - Непрозрачные токены ботов
bot_…в messaging (после того, как все боты берут токен у identity; пересоздание сcredential: platformудаляет мёртвый хэш). - Пароли CalDAV календаря и токен сессии вместо пароля в CardDAV — после перехода на
пароли приложений identity. С 01.10.2026: CardDAV координатора в этом режиме уже берёт
пароль приложения (
carddav); пароли устройств календаря уходят отдельным переключателемdav_auth(карточка «Вход через identity» → CalDAV и CardDAV, илиPUT /admin/api/settings/dav-auth), когда люди завели пароли приложений. -
ST_TOKEN_SECRET— только после служебных токенов на ключах (п. 4): до тех пор им подписываются токены сервисов. - Журнал отзыва остаётся; уходят пулл координатора каждые 15 секунд и рассылка отзыва HMAC-сессий.
6. Где что было и где стало
| Что | Было | Стало |
|---|---|---|
| Люди (учётные записи, блокировка, удаление, пароли) | координатор → Users | identity → Люди. В Users координатора — роли человека и его устройства |
| Группы и членство | координатор → Users → Groups | identity → Группы. У координатора — только «Groups → roles» |
| Роли и права | координатор → Users → Roles | без изменений, координатор |
| Вход через корпоративный провайдер | координатор → Users → карточка «Single sign-on (OIDC)» | identity → корпоративные провайдеры и домены входа |
| Локальный вход консоли | /admin, логин и пароль | /admin → страница identity; экстренно — /admin/breakglass |
| Гости: приглашение, срок, отзыв, коды восстановления | координатор → Users (фильтр guest), «Access recovery», guest-max-days | identity → «Го сти» и политика гостей (max_days, default_days, max_per_sponsor); в приложении — как было |
| Боты: создание | координатор → AI & automation → Bots | пока там же (запись пишется в identity и messaging) |
| Боты: владелец, ключи, секреты, передача, ревизия | нет | identity → «Боты», политика ревизий bot_days |
| Подключение LDAP, группы и люди из LDAP | координатор → Settings → LDAP | identity → «Каталог» |
| Фотографии из AD/LDAP | координатор → Settings → «Directory photos (AD / LDAP)» | identity → «Каталог»; политика фото прежняя |
| SimpleOne (HRMS) | координатор → Settings → «SimpleOne (HRMS)» | identity → «Каталог» |
| Пропуск пароля в LDAP | координатор → LDAP | identity, PUT /control/ldap/pass-through (с 28.09) |
| Доступ к сервисам | нет | identity → Политики / Люди / Группы → «Доступ к SimpleTwo» |
| Переключатель токена | нет | координатор → Settings → «Вход через identity» (GET/PUT /admin/api/settings/platform-token, /service-token); выпуск у identity — консоль identity → Политики → «Выпуск токена платформы» |
7. Режим каталога — опция продукта ID
С identity 0.46 у роли два режима. Провайдер (по умолчанию) — всё, что описано выше:
собственные учётные данные и факторы, провайдер OIDC/SAML для приложений компании, LDAP-сервер,
выпуск токена платформы. Каталог — identity ведёт только людей, группы, алиасы, контакты,
ящики и provisioning, принимает SCIM, брокерит вход к корпоративному провайдеру; вход людей
выдаёт координатор, как до переключения. В режиме каталога двери провайдера отвечают
409 provider_off, страница входа предлагает только кнопки корпоративного провайдера,
LDAP-слушатели не открываются, а переключатели политики, которые включили бы фактор или
провайдер, отклоняются с тем же кодом. Двери координатора (хранение и проверка паролей, кодов
гостей, паролей приложений) открыты в обоих режимах: координатор — аутентификатор ядра и
хранит в каталоге то, чем сам проверяет вход.
Режим задаёт консоль координатора: Настройки → Опции продукта → ID. Выключенная опция
доходит до хоста identity с его желаемым состоянием (параметр mode, переменная DIR_MODE) на
следующем опросе. Опцию нельзя выключить, пока platform_token стоит на identity: сначала
назад на hmac. Консоль identity показывает режим каталога карточкой на вкладке «Политики»;
/healthz отдаёт mode.
Открытые вопросы
То, что ADR-0047 не решает, а оператор встретит:
- Кто объявляет окно и как. Не определено, кто сообщает людям о повторном входе и по какому каналу — сам SimpleTwo (бот, баннер в приложении) или организация.
- Сколько ждать обновления клиентов. Нет порога доли обновившихся устройств и срока между выпуском клиентов и переключением; нет и способа заставить старое приложение обновиться, кроме сообщения «войдите снова».
- Кнопки нет — сведено 01.10.2026: карточка «Вход через identity» в Settings координатора (оба переключателя, блокеры со ссылками, переключение в два шага с вводом слова, возврат) и «Выпуск токена платформы» в политиках консоли identity.
- Гости в момент переключения — сведено 30.09.2026. П. 7 строился с сохранением сессии HMAC
гостя, п. 8 сделал гостей учётными записями identity; интеграция следует п. 8, как и этот
регламент: в режиме
identityучётная запись гостя входит на странице identity (приложение подставляет имя гостя подсказкой), путь HMAC остаётся только у чат-доступа гостя встречи. - Боты платформы — сделано 01.10.2026 (ADR-0047 §8a п. 8, «The platform's own bots»): бот поддержки входит по ключу своего хоста, переключатель проверяет его наличие (п. 7 проверок). Отдельного «системного владельца» нет: владелец — администратор, проводивший настройку.
- Отказоустойчивость identity. ADR требует пары узлов и реплицируемой базы; обязательна ли она до переключения и для каких установок — не решено. Переключение адресов ключей и ленты между узлами собрано отдельно и не выпущено.
ST_TOKEN_SECRET. Порядок в §8a удаляет его с переключением, но служебные токены подписываются им, пока п. 4 не включён — п. 4 выпущен выключенным (service_token: hmac), и удаление секрета ждётservice_token: keysна всём парке.- Назначение доступа. Из сервисов ленту подготовки читает только календарь; messaging,
mail, drive и телефония — нет. Включать
provisioningк переключению или позже — не решено. - Длительность стабильного периода и критерий, после которого начинаются удаления раздела 5, не заданы; после них отката нет.
- Откат для ботов и гостей, созданных в режиме
identity, не описан (раздел 4). - Звонки, идущие в момент переключения: перезапуск messaging может их оборвать; стоит ли ждать окна без звонков — не решено.
- Windows-клиент входит через identity не сделан; если он есть в установке, его пользователи после переключения не войдут.