Sari la conținut

GSSO — Функциональные и нефункциональные требования

Acest conținut nu este încă disponibil în limba selectată.

Код документаSPEC-GSSO-2026 / Отчёт 02
Версия0.1-draft (исходный текст EN, имеющий преимущественную силу)
Дата2026-10-05
СтатусЧерновик
Сопутствующие отчёты00 RFP · 01 ADR · 03 Потребители и контракт · 04 Техническая документация · 05 Дорожная карта

Настоящий отчёт является единственным источником истины для требований к GSSO. Отчёт 00 лишь обобщает их.

ВерсияДатаИзменения
0.1-draft2026-10-05Исходная матрица: GSSO-FR-001..116, 44 GSSO-NFR-, трассируемость к CAP-GSSO-01..07, CU-, NFRQ
  • Pri:
    • [M]: обязательно для MVP или GA.
    • [REC]: рекомендуется; никогда не блокирует прохождение этапа.
    • [OPT]: опционально или позже.
  • Source:
    • CAP-GSSO-nn: возможность, запрошенная потребителем (отчёт CRM 03 §4.1 и пакеты gDocFlow, gTenders, gFlow и gInsight).
    • CU-*: универсальное требование gStack.
    • NFRQnn: код caiet de sarcini.
    • DES: требуется дизайном GSSO.dc.html.
    • NEW: выявлено в ходе анализа платформы.
    • Тег потребителя (crm, interdictii, glog…) обозначает потребность, вытекающую из данного приложения (отчёт 03).
  • Component:
    • kc: расширения Keycloak, темы, базовые конфигурации realm.
    • server: микросервис gsso.
    • gateway: gsso-gateway.
    • web: gsso-web.
    • starter: gsso-spring-boot-starter.
    • ng: @gstack/gsso-angular.
    • ops: compose, Helm, runbook.
  • Phase (отчёт 05):
    • S0: Основа.
    • S1: MVP консоли и каталога.
    • S2: Управление (grants, события, политики).
    • S3: Набор интеграции и пилот.
    • S4: Миграция существующих приложений.
    • S5: Расширения.
ГруппаID[M][REC][OPT]
FR-RLM Realm и тенанты001..010721
FR-CAT Каталог сервисов011..0221020
FR-USR Пользователи и сессии023..0361130
FR-GRT Роли и grants037..0521321
FR-ORG Организационные подразделения053..056310
FR-AUT Аутентификация и федерация057..070932
FR-SYN Согласование (reconciliation)071..080910
FR-EVT События и аудит081..090910
FR-RPT Панель мониторинга и отчёты091..096420
FR-API API для приложений и набор интеграции097..1081020
FR-UI Консоль109..116800
Итого функциональных11693194
NFR (PERF 5, CAP 4, AVL 6, SEC 10, TEN 3, OBS 4, OPS 5, CMP 4, DATA 3)44

I. Функциональные требования

Section titled “I. Функциональные требования”
IDТребованиеPriSourceComponentPhase
GSSO-FR-001Реестр realm: GSSO_ADMIN регистрирует realm с именем, отображаемым именем, типом (STAFF, CETATEAN, TENANT, SERVICE), владельцем, политикой расхождений (drift) и статусом; realm создаётся в Keycloak механизмом согласования (reconciler)[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-002Создание realm из версионируемого шаблона (tenant-template) с применением базовых flow, client scopes, mappers, парольной политики, тем и event listener gsso-kafka[M]NEWkc, serverS1
GSSO-FR-003Включение/отключение realm; отключённый realm отклоняет вход; действие требует подтверждения и фиксируется в аудите[M]DESserver, webS1
GSSO-FR-004Список realm показывает отображаемое имя, имя, число пользователей, число клиентов, федерацию (broker) и статус, как на экране дизайна «Realms»[M]DESwebS1
GSSO-FR-005Переключатель realm в боковой панели ограничивает все экраны выбранным realm; выбор сохраняется для каждого администратора[M]DESwebS1
GSSO-FR-006Администрирование в пределах realm: GSSO_REALM_ADMIN с атрибутом gsso.realm=<name> видит и изменяет только этот realm[M]NEWserver, gatewayS1
GSSO-FR-007Принятие realm под управление (adoption): импорт существующего realm (например, interdictii) в каталог в режиме только для чтения с политикой расхождений IGNORE, пока владелец её не изменит[M]NEW, interdictiiserver, webS1
GSSO-FR-008Брендинг realm: отображаемое имя, логотип, акцентный цвет и локаль по умолчанию применяются к теме входа GDS через атрибуты realm[REC]NEWkc, webS2
GSSO-FR-009Экспорт realm (конфигурация, без секретов и пользователей) в JSON для резервного копирования и проверки[REC]NEWserver, webS2
GSSO-FR-010Поддержка Keycloak Organizations внутри realm как альтернатива атрибутам организационных подразделений[OPT]NEWserverS5

2. Каталог сервисов — FR-CAT

Section titled “2. Каталог сервисов — FR-CAT”
IDТребованиеPriSourceComponentPhase
GSSO-FR-011Реестр платформ (Platforma): код (в нижнем регистре, уникальный), название, тип (SAAS, PAAS), описание RO/RU/EN, владелец(ы), базовый URL, акцент, статус, realm[M]CAP-GSSO-06server, webS1
GSSO-FR-012Клиенты платформы (ClientAplicatie): clientId, протокол (OIDC, SAML), тип доступа (PUBLIC_PKCE, CONFIDENTIAL, BEARER_ONLY, SERVICE_ACCOUNT), redirect URI, web origins, post-logout URI, URL back-channel logout, audience, статус[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-013Шаблоны клиентов по типу доступа применяют безопасные значения по умолчанию: PKCE S256 для публичных клиентов, без implicit flow, без direct access grants, точные redirect URI, согласие (consent) отключено для внутренних приложений[M]NFRQ56, NEWserverS1
GSSO-FR-014Ротация секрета для конфиденциальных клиентов: генерация, однократный показ, сохранение действия предыдущего секрета в течение льготного периода (политика ротации секретов клиентов Keycloak)[M]NFRQ60server, webS2
GSSO-FR-015Клиенты service account получают client roles или scopes (например, audit:write, storage:read), объявленные на клиенте, а не через grants[M]glog, gstorageserver, webS1
GSSO-FR-016Роли платформы (RolPlatforma): код автоматически получает префикс <PLATFORMA>_, описания RO/RU/EN, составные (с дочерними ролями той же платформы), признак чувствительности, срок действия по умолчанию[M]DES, GSSO-ADR-005server, webS1
GSSO-FR-017Наборы ролей (группы): именованные наборы ролей платформы (например, «Operator Cancelaria»), предоставляемые одним запросом[M]NEW, cancelarieserver, webS2
GSSO-FR-018Audience mapper для каждой платформы: токены каждого клиента содержат audience его платформы; resource servers проверяют его[M]CAP-GSSO-01, gregistrykc, serverS1
GSSO-FR-019Разрешения token exchange для каждого клиента: список целевых audience, на которые клиент может обменивать токены (GSSO-ADR-012)[M]CAP-GSSO-07server, webS3
GSSO-FR-020Один сервисный клиент на каждый микросервис платформы (например, crm-core, crm-clienti…), создаваемых пакетно по списку[M]CAP-GSSO-01server, webS1
GSSO-FR-021Деактивация платформы: отключает все её клиенты и приостанавливает её активные grants (без удаления), обратимо[REC]NEWserverS2
GSSO-FR-022Карточка платформы показывает клиентов, роли, число grants, владельцев, состояние синхронизации и прогресс по чек-листу подключения[REC]NEWwebS2

3. Пользователи и сессии — FR-USR

Section titled “3. Пользователи и сессии — FR-USR”
IDТребованиеPriSourceComponentPhase
GSSO-FR-023Список пользователей realm с поиском по имени, username, e-mail, IDNP (только для уполномоченных ролей), фильтрами по статусу, MFA, роли платформы, организационному подразделению; столбцы как в дизайне (пользователь, e-mail, 2FA, статус, последний вход)[M]DESserver, webS1
GSSO-FR-024Создание пользователя: username, имя/фамилия, e-mail, IDNP, организационное подразделение, локаль; отправка письма-приглашения с обязательными действиями (подтвердить e-mail, задать пароль, настроить OTP, если предоставлена чувствительная роль)[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-025Редактирование атрибутов пользователя; включение/отключение пользователя (отключение завершает сессии)[M]DESserver, webS1
GSSO-FR-026Боковая панель (drawer) пользователя с вкладками Details, Credentials, Roles, Sessions, как в дизайне[M]DESwebS1
GSSO-FR-027Вкладка Credentials: пароль задан/дата последнего изменения, устройства OTP, ключи WebAuthn; действия: сброс пароля (e-mail), удаление учётных данных OTP/WebAuthn, принудительные обязательные действия[M]DESserver, webS1
GSSO-FR-028Вкладка Roles: эффективные роли платформы с указанием источника (id grant, набор, составная роль) и срока действия grant[M]DESserver, webS2
GSSO-FR-029Вкладка Sessions: активные сессии с клиентом, IP, устройством (user agent), временем начала и последнего обращения; завершение одной или всех[M]DES, CAP-GSSO-03server, webS1
GSSO-FR-030Разблокировка пользователя, временно заблокированного защитой от перебора паролей (brute-force)[M]NEWserver, webS1
GSSO-FR-031Проекция пользователя (ProiectieUtilizator) обновляется по событиям, ночной полной синхронизацией и при открытии; показывает «обновлено в»[M]GSSO-ADR-008serverS1
GSSO-FR-032sub — UUID и неизменен; изменение username и e-mail никогда не меняет sub[M]CAP-GSSO-01kcS0
GSSO-FR-033Атрибут пользователя locale (ro, ru, en), редактируемый пользователем и администратором; передаётся в токене[M]CAP-GSSO-01kc, serverS1
GSSO-FR-034Пакетный импорт пользователей из CSV (с проверкой, сначала отчёт пробного запуска)[REC]cancelarieserver, webS2
GSSO-FR-035Самообслуживание через консоль учётной записи Keycloak в теме GDS: профиль, пароль, MFA, сессии, связанные учётные записи[REC]NEWkcS2
GSSO-FR-036Время последнего входа и последней неудачной попытки для каждого пользователя по потоку событий[REC]DES, CRM REQ-PLTserver, webS2
IDТребованиеPriSourceComponentPhase
GSSO-FR-037Экран ролей realm и ролей клиентов, как в дизайне: роль, описание, составная/простая, участники; роли клиентов сгруппированы по клиентам[M]DESwebS1
GSSO-FR-038Запрос на предоставление доступа (AtribuireAcces): пользователь, роль платформы или набор, необязательное организационное подразделение, validDe, validPana, обязательное обоснование; инициатор фиксируется[M]NEW, NFRQ56server, webS2
GSSO-FR-039Жизненный цикл grant SOLICITATA → APROBATA → ACTIVA → REVOCATA/EXPIRATA, SOLICITATA → RESPINSA обеспечивается на сервисном уровне; недопустимые переходы отклоняются с RFC 7807 invalid-transition[M]GSSO-ADR-006serverS2
GSSO-FR-040Одобрение владельцем платформы или администратором realm; для чувствительных ролей — второй, отличный от первого, утверждающий с GSSO_APPROVER[M]NFRQ56, GSSO-ADR-006server, webS2
GSSO-FR-041Никто не может одобрить созданный им самим запрос или grant для самого себя[M]NFRQ56serverS2
GSSO-FR-042ACTIVA — только после того, как reconciler подтвердит назначение роли в Keycloak; при сбое остаётся APROBATA с отображением ошибки синхронизации[M]GSSO-ADR-004serverS2
GSSO-FR-043Отзыв с обязательным обоснованием удаляет назначение и запускает завершение сессий и gsso.access-revoked.v1[M]CAP-GSSO-04serverS2
GSSO-FR-044Планировщик истечения (ежечасно) переводит в статус истёкших grants с прошедшим validPana и удаляет назначения[M]NEWserverS2
GSSO-FR-045Предупреждения об истечении пользователю и владельцу платформы за 14 дней и за 1 день через GNotify[M]NEWserverS2
GSSO-FR-046Прямое предоставление администратором для нечувствительных ролей (запрос + одобрение за один шаг), фиксируется в аудите как ACORDARE_DIRECTA[M]NEWserver, webS2
GSSO-FR-047Входящие grants для каждого утверждающего: ожидающие запросы с инициатором, пользователем, ролью, обоснованием, давностью; пакетное одобрение/отклонение[M]NEWwebS2
GSSO-FR-048История grants по пользователю и по роли, с фильтрацией и экспортом (CSV)[M]NFRQ65server, webS2
GSSO-FR-049Назначения ролей, созданные напрямую в Keycloak (не через grant), отображаются как расхождение (MAPARE_NEGUVERNATA)[M]GSSO-ADR-004serverS2
GSSO-FR-050Кампания пересмотра доступа: по каждой платформе владельцы подтверждают или отзывают каждый активный grant до установленного срока; неподтверждённые grants помечаются[REC]NFRQ56server, webS5
GSSO-FR-051Запрос grant приложением от имени пользователя через api/v1/app (например, при подключении в cancelarie)[REC]cancelarie, crmserverS3
GSSO-FR-052Правила разделения обязанностей: пары ролей, которые нельзя иметь одновременно (например, INTERDICTII_EMITENT + INTERDICTII_APROBATOR); конфликтующие запросы отклоняются или помечаются[OPT]NEWserverS5

5. Организационные подразделения — FR-ORG

Section titled “5. Организационные подразделения — FR-ORG”
IDТребованиеPriSourceComponentPhase
GSSO-FR-053Дерево организационных подразделений realm (UnitateOrganizationala): код, название RO/RU/EN, родитель, руководитель(и)[M]CAP-GSSO-04server, webS2
GSSO-FR-054Атрибут пользователя org_unit (код) и claim org_unit; необязательный claim org_unit_path (коды от корня)[M]CAP-GSSO-04, ginsightkc, serverS2
GSSO-FR-055Grants могут ограничиваться организационным подразделением; при наличии ограничение передаётся в claim roles_scoped {"<ROLE>": ["<ou>"…]}[M]NEWkc, serverS2
GSSO-FR-056Импорт организационных подразделений из CSV/JSON[REC]NEWserverS2

6. Аутентификация и федерация — FR-AUT

Section titled “6. Аутентификация и федерация — FR-AUT”
IDТребованиеPriSourceComponentPhase
GSSO-FR-057Политика аутентификации realm (PoliticaAutentificare): переключатели методов — пароль, OTP, WebAuthn, QR, client credentials, broker, magic link, как на экране дизайна «Authentication»[M]DESserver, webS2
GSSO-FR-058Browser flow отображается как упорядоченные шаги (cookie, broker, username+пароль, условный второй фактор) с требованием (alternative/required/conditional)[M]DESserver, webS2
GSSO-FR-059Условная MFA: OTP или WebAuthn обязательны, если пользователь имеет любую чувствительную роль (собственный условный authenticator или «condition – user role» на составной роли GSSO_MFA_REQUIRED)[M]CAP-GSSO-02, NFRQ58kc, serverS2
GSSO-FR-060Парольная политика realm: длина ≥ 12, сложность, история 5, не совпадает с username/e-mail, максимальный срок действия — опционально[M]NFRQ58kc, serverS0
GSSO-FR-061Защита от перебора паролей включена (блокировка после 5 неудачных попыток, нарастающее ожидание)[M]NFRQ58kcS0
GSSO-FR-062Время жизни сессий по realm и по клиенту: SSO idle 30 мин / max 10 ч для сотрудников; клиент административной консоли — 15 мин idle[M]NFRQ60kc, serverS0
GSSO-FR-063Поставщик идентификации MPass/eID (SAML) в realm cetatean; first-broker-login связывает или создаёт пользователя по IDNP; mock IdP для тестов[M]NEW, drumurikc, serverS2
GSSO-FR-064Федерация пользователей AD/LDAP для каждого realm (по умолчанию только чтение) с mappers атрибутов и групп[M]CAP-GSSO-02kc, server, webS2
GSSO-FR-065WebAuthn / passkeys (политики двухфакторной и беспарольной аутентификации)[M]DESkcS2
GSSO-FR-066Темы GDS для входа, учётной записи и e-mail на RO/RU/EN; IBM Plex; акцент realm[REC]NFRQ38/40kcS0
GSSO-FR-067Вход по magic link (e-mail) только для клиентов с низким уровнем доверия[OPT]DESkcS5
GSSO-FR-068Кросс-девайсный вход по QR с приложением gsso_mob как authenticator Keycloak (заменяет отдельный approve endpoint на каждом сайте)[OPT]gsso_mob, Q-GSSO-9kcS5
GSSO-FR-069Обязательные действия, настраиваемые для каждого realm: подтверждение e-mail, смена пароля, настройка OTP, условия использования[REC]NEWkc, serverS2
GSSO-FR-070Claim уровня доверия acr (1 пароль, 2 MFA, 3 MPass высокий) и step-up через acr_values для чувствительных операций[REC]NEWkcS3

7. Согласование (reconciliation) — FR-SYN

Section titled “7. Согласование (reconciliation) — FR-SYN”
IDТребованиеPriSourceComponentPhase
GSSO-FR-071Каждое изменение каталога, пользователя или grant создаёт JobSincronizare в той же транзакции (outbox)[M]GSSO-ADR-004serverS1
GSSO-FR-072Рабочий процесс reconciler идемпотентно применяет задания через Keycloak Admin REST API с service account gsso-reconciler[M]GSSO-ADR-004serverS1
GSSO-FR-073Повтор с экспоненциальной задержкой (1 с → 5 мин, 10 попыток), затем FAILED с оповещением через GNotify[M]NEWserverS1
GSSO-FR-074Полное согласование каждого realm каждые 15 мин (настраивается) и по запросу; diff управляемых типов объектов[M]GSSO-ADR-004serverS1
GSSO-FR-075Выявленные расхождения сохраняются с JSON diff; политика realm REPORT, ENFORCE, IGNORE[M]NEWserverS1
GSSO-FR-076Управляемые объекты имеют gsso.managed=true; неуправляемые объекты никогда не удаляются, только отображаются в отчётах[M]NEWserverS1
GSSO-FR-077Экран Sync: задания (ожидающие, выполняющиеся, OK, неуспешные, расхождения) с фильтрами, повтором и «принять расхождение» (принять значение из Keycloak)[M]NEWwebS1
GSSO-FR-078Каждый объект каталога показывает в списках свой stareSync (синхронизирован, ожидает, ошибка, расхождение)[M]NEWwebS1
GSSO-FR-079Задания для realm одновременно применяет только один экземпляр reconciler (advisory lock), поэтому порядок в пределах realm сохраняется[M]NEWserverS1
GSSO-FR-080Режим пробного запуска (dry-run) для согласования и принятия под управление, формирующий отчёт без записи[REC]NEWserver, webS1

8. События и аудит — FR-EVT

Section titled “8. События и аудит — FR-EVT”
IDТребованиеPriSourceComponentPhase
GSSO-FR-081Event listener Keycloak gsso-kafka публикует пользовательские и административные события в gsso.kc-events.v1 (CloudEvents, асинхронно, без блокировки)[M]GSSO-ADR-007kcS2
GSSO-FR-082Идемпотентный потребитель сохраняет события в EvenimentGsso и обновляет проекцию и агрегаты[M]GSSO-ADR-007serverS2
GSSO-FR-083Собственные события GSSO (каталог, grant, синхронизация, действия в административной консоли) записываются в той же транзакции, что и изменение[M]CU-AUDITserverS1
GSSO-FR-084EvenimentGsso — только добавление: в репозитории нет update/delete; триггер базы данных отклоняет UPDATE/DELETE[M]CU-AUDIT, NFRQ65serverS1
GSSO-FR-085Хеш-цепочка для каждого realm (hashPrecedent, hash SHA-256) и endpoint проверки[M]NEWserverS2
GSSO-FR-086Пересылка каждого события в GLog с повтором и id квитанции[M]CU-AUDITserverS2
GSSO-FR-087Дозагрузка (back-fill) из API событий Keycloak при наличии пропуска в потоке[M]NEWserverS2
GSSO-FR-088Список событий с фильтрами (тип, субъект, realm, клиент, IP, период) и детальным просмотром[M]DESwebS2
GSSO-FR-089Публикация gsso.access-revoked.v1 и gsso.user-changed.v1 для потребителей[M]CAP-GSSO-04serverS2
GSSO-FR-090Оповещения безопасности через GNotify: блокировка администратора защитой от перебора, вход администратора из новой страны, предоставление роли GSSO_*, сбой reconciler[REC]NFRQ65serverS2

9. Панель мониторинга и отчёты — FR-RPT

Section titled “9. Панель мониторинга и отчёты — FR-RPT”
IDТребованиеPriSourceComponentPhase
GSSO-FR-091KPI панели мониторинга: realm, клиенты (OIDC/SAML), пользователи (прирост за сегодня), активные сессии[M]DESserver, webS2
GSSO-FR-092Входы за 24 ч в интервалах по 2 часа, успешные и неуспешные[M]DESserver, webS2
GSSO-FR-093Последние события безопасности (20 последних) с субъектом, текстом, realm, IP, временем[M]DESwebS2
GSSO-FR-094Распределение методов аутентификации за 24 ч (пароль, OTP, WebAuthn, MPass/eID, app-to-app)[M]DESserver, webS2
GSSO-FR-095Отчёт о доступе: кто какую роль имеет на какой платформе (фильтр по платформе, организационному подразделению), CSV/PDF[REC]NFRQ56server, webS2
GSSO-FR-096Отчёт о неактивных учётных записях: пользователи без входа в течение N дней, имеющие роли[REC]NEWserver, webS5

10. API для приложений и набор интеграции — FR-API

Section titled “10. API для приложений и набор интеграции — FR-API”
IDТребованиеPriSourceComponentPhase
GSSO-FR-097API зоны admin, охватывающий все функции консоли; OpenAPI опубликован[M]CU-API-003serverS1
GSSO-FR-098API зоны app с client credentials и scope gsso:app; каждое приложение видит только свою платформу[M]CAP-GSSO-06serverS3
GSSO-FR-099Самостоятельная регистрация приложения: создание/обновление своей платформы, клиентов и ролей (если клиент приложения отмечен соответствующим признаком)[M]CAP-GSSO-06serverS3
GSSO-FR-100Поиск пользователя по sub, username, e-mail или IDNP (IDNP — только для клиентов, разрешённых DPO)[M]CAP-GSSO-03, crmserverS3
GSSO-FR-101Запрос статуса пользователя и его ролей платформы (GET /api/v1/app/utilizatori/{sub}/roluri)[M]CAP-GSSO-03serverS3
GSSO-FR-102Завершение сессий пользователя (DELETE /api/v1/app/utilizatori/{sub}/sesiuni)[M]CAP-GSSO-03serverS3
GSSO-FR-103Пользователи, имеющие роль (GET /api/v1/app/roluri/{cod}/utilizatori), постранично; используется, например, gFlow для определения кандидатов[M]gflowserverS3
GSSO-FR-104gsso-spring-boot-starter: проверка resource server (issuer, JWKS, audience), roles → authorities с картой псевдонимов, GssoPrincipal, клиенты client-credentials и token exchange, deny-list отзыва, health indicator Keycloak, вспомогательный класс Testcontainers[M]GSSO-ADR-009starterS3
GSSO-FR-105@gstack/gsso-angular: режим PKCE или BFF, guard и директива ролей, silent refresh, single logout, синхронизация локали[M]GSSO-ADR-009ngS3
GSSO-FR-106Runbook и чек-лист подключения (отчёт 03 §8) и пример приложения[M]NEWopsS3
GSSO-FR-107Вспомогательная конфигурация Kafka SASL OAUTHBEARER для сервисных клиентов[REC]CAP-GSSO-01starterS3
GSSO-FR-108Terraform/OpenTofu или CLI (gsso-cli) для подключения платформ из CI[REC]CAP-GSSO-06opsS5
IDТребованиеPriSourceComponentPhase
GSSO-FR-109Макет GDS, как в дизайне: боковая панель с разделами Identity (Dashboard, Realms, Applications) и Access (Users, Roles, Authentication), а также Governance (Platforms, Grants, Sync, Events)[M]DESwebS1
GSSO-FR-110Переключатель языка RO/RU/EN в заголовке; все надписи переведены; предметные термины — на румынском[M]NFRQ38webS1
GSSO-FR-111Контекстное действие «Создать» на каждом экране (realm, клиент, пользователь, роль, grant), открывающее боковую панель с формой[M]DESwebS1
GSSO-FR-112Адаптивный макет до 360 px со сворачиваемой боковой панелью (по точкам перелома дизайна 880/480 px)[M]DES, NFRQ39webS1
GSSO-FR-113Таблицы с фильтрацией, сортировкой, пагинацией и пустыми состояниями; деструктивные действия требуют подтверждения с вводом имени объекта[M]NEWwebS1
GSSO-FR-114Экраны и действия скрыты или недоступны в зависимости от роли GSSO администратора и его области realm; backend обеспечивает то же самое[M]NFRQ56web, serverS1
GSSO-FR-115Всплывающие уведомления (toast) и значки состояния синхронизации после каждого изменения (ожидает → синхронизирован)[M]DESwebS1
GSSO-FR-116Доступность WCAG 2.1 AA (клавиатура, фокус, контраст, подписи)[M]NFRQ39webS1

II. Нефункциональные требования

Section titled “II. Нефункциональные требования”

12. Производительность — NFR-PERF

Section titled “12. Производительность — NFR-PERF”
IDТребованиеЦелевое значениеПроверка
GSSO-NFR-PERF-001Вход (пароль, существующий пользователь) end-to-end на Keycloakp95 < 500 мс при 50 входах/снагрузочный тест
GSSO-NFR-PERF-002Endpoints списков консоли (пользователи, grants, события; 50 строк)p95 < 800 мс при 100 000 пользователей, 1 млн событийнагрузочный тест (NFRQ20)
GSSO-NFR-PERF-003Изменение каталога → отражено в Keycloakp95 < 2 с, p99 < 10 сзамер в IT
GSSO-NFR-PERF-004Событие Kafka → отображается в консолиp95 < 5 сзамер в IT
GSSO-NFR-PERF-005Накладные расходы на проверку токена в starter (кэшированный JWKS)< 2 мс на запросмикробенчмарк
IDТребованиеЦелевое значение
GSSO-NFR-CAP-001Пользователи-сотрудники в gstack20 000
GSSO-NFR-CAP-002Пользователи-граждане в cetatean1 000 000
GSSO-NFR-CAP-003Одновременные SSO-сессии10 000
GSSO-NFR-CAP-004Платформы / клиенты / роли / активные grants100 / 1 000 / 2 000 / 200 000

14. Доступность и непрерывность — NFR-AVL

Section titled “14. Доступность и непрерывность — NFR-AVL”
IDТребованиеЦелевое значение
GSSO-NFR-AVL-001Доступность Keycloak (вход, токен, JWKS)99,9 % в месяц (NFRQ доступность)
GSSO-NFR-AVL-002Доступность консоли и API GSSO99,5 % в месяц
GSSO-NFR-AVL-003Вход и выдача токенов не зависят от доступности gsso, Kafka или GLogподтверждается chaos-тестом
GSSO-NFR-AVL-004RPO / RTO базы данных Keycloak15 мин / 1 ч
GSSO-NFR-AVL-005RPO / RTO базы данных GSSO1 ч / 4 ч; каталог может быть восстановлен через принятие под управление (adoption)
GSSO-NFR-AVL-006Мониторинг истечения TLS-сертификатов с оповещением за 21 деньтест оповещения
IDТребование
GSSO-NFR-SEC-001OWASP ASVS L2 для консоли, шлюза и API; OWASP Top 10 (NFRQ56/57)
GSSO-NFR-SEC-002Токены подписываются RS256 (или ES256); ротация ключей каждые 90 дней с перекрытием; HS* не допускается
GSSO-NFR-SEC-003SPA никогда не хранит токены (BFF); сессионный cookie HttpOnly, Secure, SameSite=Lax; защита от CSRF
GSSO-NFR-SEC-004Учётные данные gsso-reconciler хранятся только в хранилище секретов; его права ограничены manage-realm, manage-users, manage-clients, view-events управляемых realm (без администратора master)
GSSO-NFR-SEC-005Никаких секретов в git; секреты клиентов показываются один раз; секреты шифруются при хранении в БД GSSO, если вообще хранятся (предпочтительно не хранить)
GSSO-NFR-SEC-006IDNP шифруется при хранении в проекции, маскируется в UI, если нет роли GSSO_IDNP_VIEW
GSSO-NFR-SEC-007Заголовки безопасности (CSP, HSTS, X-Frame-Options, Referrer-Policy) на шлюзе и в темах Keycloak (NFRQ56)
GSSO-NFR-SEC-008Клиент административной консоли: MFA обязательна, idle сессии 15 мин
GSSO-NFR-SEC-009SAST, SCA, сканирование секретов и SBOM в CI (/gsast), базовый DAST (/gtest) — NFRQ90/91
GSSO-NFR-SEC-010Ограничение частоты запросов (rate limiting) на API app (по клиенту) и на endpoints входа на уровне ingress

16. Изоляция тенантов — NFR-TEN

Section titled “16. Изоляция тенантов — NFR-TEN”
IDТребование
GSSO-NFR-TEN-001Каждая строка таблиц GSSO содержит realm; каждый запрос администратора с областью realm фильтруется на стороне сервера
GSSO-NFR-TEN-002Клиент gsso:app приложения может читать и изменять только объекты своей платформы
GSSO-NFR-TEN-003Тесты доказывают, что ни один endpoint не раскрывает данные другого realm или платформы (проверка матрицы авторизации)

17. Наблюдаемость — NFR-OBS

Section titled “17. Наблюдаемость — NFR-OBS”
IDТребование
GSSO-NFR-OBS-001/health/live, /health/ready (БД, Kafka, Keycloak), /metrics (Prometheus), /info в gsso и gsso-gateway; в Keycloak включены /health и /metrics
GSSO-NFR-OBS-002Метрики: задания синхронизации по состояниям, длительность согласования, число расхождений, задержка событий, задержка пересылки в GLog, входы/неудачи по realm
GSSO-NFR-OBS-003Структурированные JSON-логи с trace id; никаких токенов, секретов или IDNP в логах (NFRQ35/50)
GSSO-NFR-OBS-004Оповещения: сбой reconciler, задержка событий > 5 мин, Keycloak недоступен, истечение сертификата, уровень ошибок

18. Эксплуатационная пригодность — NFR-OPS

Section titled “18. Эксплуатационная пригодность — NFR-OPS”
IDТребование
GSSO-NFR-OPS-001Локальный стек одной командой (docker compose up) и документированное развёртывание на демо-хосте
GSSO-NFR-OPS-002Helm chart для целевой среды Kubernetes
GSSO-NFR-OPS-003Резервное копирование базы данных Keycloak ежедневно + перед каждым обновлением; восстановление проверяется ежеквартально
GSSO-NFR-OPS-004Обновление Keycloak допускается только после прохождения набора интеграционных тестов базовой конфигурации realm + reconciler на новой версии
GSSO-NFR-OPS-005Runbook: принятие под управление (takeover), обновление, ротация ключей, продление сертификатов, break-glass, восстановление

19. Совместимость и стандарты — NFR-CMP

Section titled “19. Совместимость и стандарты — NFR-CMP”
IDТребование
GSSO-NFR-CMP-001OpenID Connect Core 1.0, практики OAuth 2.1 (PKCE, без implicit), RFC 8693, RFC 7807, SAML 2.0
GSSO-NFR-CMP-002Стандарт API GovStack: зоны api/v1, health endpoints, OpenAPI, Idempotency-Key для POST (проверяется api_audit.py)
GSSO-NFR-CMP-003Стек DEV-PLAYBOOK §2, версии — в том виде, в каком их генерирует JHipster 9.1.0
GSSO-NFR-CMP-004Keycloak 26.6.x; расширения собираются под ту же версию SPI

20. Защита данных и хранение — NFR-DATA

Section titled “20. Защита данных и хранение — NFR-DATA”
IDТребование
GSSO-NFR-DATA-001Персональные данные минимизированы до: username, имя, e-mail, IDNP (необязательно), организационное подразделение, локаль
GSSO-NFR-DATA-002События хранятся в GSSO 90 дней, затем удаляются (drop партиции); GLog хранит журнал в соответствии со своей политикой
GSSO-NFR-DATA-003Удаление пользователя распространяется: проекция очищается, ссылки на субъекта заменяются на sub

21. Запросы возможностей от потребителей → требования

Section titled “21. Запросы возможностей от потребителей → требования”
CAPЗапросТребования GSSOPhase
CAP-GSSO-01Корпоративный realm; конфиденциальный crm-gateway; один сервисный клиент на микросервис; Kafka OAUTHBEARER; клиенты GDocs/GLog; locale; UUID subFR-001, 012, 018, 020, 032, 033, 107S1–S3
CAP-GSSO-02Федерация AD/LDAP, TOTP MFA в зависимости от ролиFR-059, 064S2
CAP-GSSO-03Список сессий и принудительное завершение через admin API; статус и роли пользователяFR-029, 100, 101, 102S1, S3
CAP-GSSO-04Отзыв ≤ 60 с; claims организационных подразделенийFR-043, 053..055, 089; GSSO-ADR-013S2
CAP-GSSO-06Автоматизируемое создание клиентовFR-011, 098, 099, 108S3, S5
CAP-GSSO-07Token exchange RFC 8693FR-019; GSSO-ADR-012S3

22. Универсальные требования (CU-*) → требования

Section titled “22. Универсальные требования (CU-*) → требования”
CUСтатус для GSSOТребования
CU-AUTH-001 (аутентификация)Предоставляется GSSO всем приложениям; консоль использует еёFR-057..070; NFR-SEC-002, 003, 008
CU-AUTH-002 (подпись)Неприменимо — MSign / gsso_mob—
CU-AUTH-003 (сессии)ПрименимоFR-029, 062, 102; GSSO-ADR-013
CU-RBAC-001..003Применимо — GSSO является источником RBAC для всех приложенийFR-016, 037..052, 114
CU-AUDIT-001..003Применимо, через GLogFR-081..090
CU-OBS-001..004ПрименимоNFR-OBS-001..004
CU-API-003..006Применимо — обязательноFR-097, 098; NFR-CMP-002
CU-MSG-001Применимо (Kafka, идемпотентные потребители)FR-081, 082, 089
CU-DATA-001..003ПрименимоNFR-DATA-001..003, NFR-AVL-004/005
CU-DEPLOYПрименимоNFR-OPS-001..005

23. NFRQ (caiet de sarcini) → требования

Section titled “23. NFRQ (caiet de sarcini) → требования”
NFRQGSSO
NFRQ20–22 производительностьNFR-PERF-001..005
NFRQ35/50/51 журналированиеFR-081..090, NFR-OBS-003
NFRQ38 многоязычностьFR-066, 110
NFRQ39 доступностьFR-112, 116
NFRQ40 единый дизайн (GDS)FR-066, 109
NFRQ56–66 безопасностьFR-013, 014, 040, 041, 059..062, NFR-SEC-*
NFRQ90–93 тестирование и приёмкаNFR-SEC-009, отчёт 04 §12, test-scenarios.md