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 лишь обобщает их.
История изменений
Section titled “История изменений”| Версия | Дата | Изменения |
|---|---|---|
| 0.1-draft | 2026-10-05 | Исходная матрица: GSSO-FR-001..116, 44 GSSO-NFR-, трассируемость к CAP-GSSO-01..07, CU-, NFRQ |
Столбцы
Section titled “Столбцы”- 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: Расширения.
Сводка
Section titled “Сводка”| Группа | ID | [M] | [REC] | [OPT] |
|---|---|---|---|---|
| FR-RLM Realm и тенанты | 001..010 | 7 | 2 | 1 |
| FR-CAT Каталог сервисов | 011..022 | 10 | 2 | 0 |
| FR-USR Пользователи и сессии | 023..036 | 11 | 3 | 0 |
| FR-GRT Роли и grants | 037..052 | 13 | 2 | 1 |
| FR-ORG Организационные подразделения | 053..056 | 3 | 1 | 0 |
| FR-AUT Аутентификация и федерация | 057..070 | 9 | 3 | 2 |
| FR-SYN Согласование (reconciliation) | 071..080 | 9 | 1 | 0 |
| FR-EVT События и аудит | 081..090 | 9 | 1 | 0 |
| FR-RPT Панель мониторинга и отчёты | 091..096 | 4 | 2 | 0 |
| FR-API API для приложений и набор интеграции | 097..108 | 10 | 2 | 0 |
| FR-UI Консоль | 109..116 | 8 | 0 | 0 |
| Итого функциональных | 116 | 93 | 19 | 4 |
| NFR (PERF 5, CAP 4, AVL 6, SEC 10, TEN 3, OBS 4, OPS 5, CMP 4, DATA 3) | 44 |
I. Функциональные требования
Section titled “I. Функциональные требования”1. Realm и тенанты — FR-RLM
Section titled “1. Realm и тенанты — FR-RLM”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-001 | Реестр realm: GSSO_ADMIN регистрирует realm с именем, отображаемым именем, типом (STAFF, CETATEAN, TENANT, SERVICE), владельцем, политикой расхождений (drift) и статусом; realm создаётся в Keycloak механизмом согласования (reconciler) | [M] | DES, CAP-GSSO-01 | server, web | S1 |
| GSSO-FR-002 | Создание realm из версионируемого шаблона (tenant-template) с применением базовых flow, client scopes, mappers, парольной политики, тем и event listener gsso-kafka | [M] | NEW | kc, server | S1 |
| GSSO-FR-003 | Включение/отключение realm; отключённый realm отклоняет вход; действие требует подтверждения и фиксируется в аудите | [M] | DES | server, web | S1 |
| GSSO-FR-004 | Список realm показывает отображаемое имя, имя, число пользователей, число клиентов, федерацию (broker) и статус, как на экране дизайна «Realms» | [M] | DES | web | S1 |
| GSSO-FR-005 | Переключатель realm в боковой панели ограничивает все экраны выбранным realm; выбор сохраняется для каждого администратора | [M] | DES | web | S1 |
| GSSO-FR-006 | Администрирование в пределах realm: GSSO_REALM_ADMIN с атрибутом gsso.realm=<name> видит и изменяет только этот realm | [M] | NEW | server, gateway | S1 |
| GSSO-FR-007 | Принятие realm под управление (adoption): импорт существующего realm (например, interdictii) в каталог в режиме только для чтения с политикой расхождений IGNORE, пока владелец её не изменит | [M] | NEW, interdictii | server, web | S1 |
| GSSO-FR-008 | Брендинг realm: отображаемое имя, логотип, акцентный цвет и локаль по умолчанию применяются к теме входа GDS через атрибуты realm | [REC] | NEW | kc, web | S2 |
| GSSO-FR-009 | Экспорт realm (конфигурация, без секретов и пользователей) в JSON для резервного копирования и проверки | [REC] | NEW | server, web | S2 |
| GSSO-FR-010 | Поддержка Keycloak Organizations внутри realm как альтернатива атрибутам организационных подразделений | [OPT] | NEW | server | S5 |
2. Каталог сервисов — FR-CAT
Section titled “2. Каталог сервисов — FR-CAT”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-011 | Реестр платформ (Platforma): код (в нижнем регистре, уникальный), название, тип (SAAS, PAAS), описание RO/RU/EN, владелец(ы), базовый URL, акцент, статус, realm | [M] | CAP-GSSO-06 | server, web | S1 |
| 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-01 | server, web | S1 |
| GSSO-FR-013 | Шаблоны клиентов по типу доступа применяют безопасные значения по умолчанию: PKCE S256 для публичных клиентов, без implicit flow, без direct access grants, точные redirect URI, согласие (consent) отключено для внутренних приложений | [M] | NFRQ56, NEW | server | S1 |
| GSSO-FR-014 | Ротация секрета для конфиденциальных клиентов: генерация, однократный показ, сохранение действия предыдущего секрета в течение льготного периода (политика ротации секретов клиентов Keycloak) | [M] | NFRQ60 | server, web | S2 |
| GSSO-FR-015 | Клиенты service account получают client roles или scopes (например, audit:write, storage:read), объявленные на клиенте, а не через grants | [M] | glog, gstorage | server, web | S1 |
| GSSO-FR-016 | Роли платформы (RolPlatforma): код автоматически получает префикс <PLATFORMA>_, описания RO/RU/EN, составные (с дочерними ролями той же платформы), признак чувствительности, срок действия по умолчанию | [M] | DES, GSSO-ADR-005 | server, web | S1 |
| GSSO-FR-017 | Наборы ролей (группы): именованные наборы ролей платформы (например, «Operator Cancelaria»), предоставляемые одним запросом | [M] | NEW, cancelarie | server, web | S2 |
| GSSO-FR-018 | Audience mapper для каждой платформы: токены каждого клиента содержат audience его платформы; resource servers проверяют его | [M] | CAP-GSSO-01, gregistry | kc, server | S1 |
| GSSO-FR-019 | Разрешения token exchange для каждого клиента: список целевых audience, на которые клиент может обменивать токены (GSSO-ADR-012) | [M] | CAP-GSSO-07 | server, web | S3 |
| GSSO-FR-020 | Один сервисный клиент на каждый микросервис платформы (например, crm-core, crm-clienti…), создаваемых пакетно по списку | [M] | CAP-GSSO-01 | server, web | S1 |
| GSSO-FR-021 | Деактивация платформы: отключает все её клиенты и приостанавливает её активные grants (без удаления), обратимо | [REC] | NEW | server | S2 |
| GSSO-FR-022 | Карточка платформы показывает клиентов, роли, число grants, владельцев, состояние синхронизации и прогресс по чек-листу подключения | [REC] | NEW | web | S2 |
3. Пользователи и сессии — FR-USR
Section titled “3. Пользователи и сессии — FR-USR”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-023 | Список пользователей realm с поиском по имени, username, e-mail, IDNP (только для уполномоченных ролей), фильтрами по статусу, MFA, роли платформы, организационному подразделению; столбцы как в дизайне (пользователь, e-mail, 2FA, статус, последний вход) | [M] | DES | server, web | S1 |
| GSSO-FR-024 | Создание пользователя: username, имя/фамилия, e-mail, IDNP, организационное подразделение, локаль; отправка письма-приглашения с обязательными действиями (подтвердить e-mail, задать пароль, настроить OTP, если предоставлена чувствительная роль) | [M] | DES, CAP-GSSO-01 | server, web | S1 |
| GSSO-FR-025 | Редактирование атрибутов пользователя; включение/отключение пользователя (отключение завершает сессии) | [M] | DES | server, web | S1 |
| GSSO-FR-026 | Боковая панель (drawer) пользователя с вкладками Details, Credentials, Roles, Sessions, как в дизайне | [M] | DES | web | S1 |
| GSSO-FR-027 | Вкладка Credentials: пароль задан/дата последнего изменения, устройства OTP, ключи WebAuthn; действия: сброс пароля (e-mail), удаление учётных данных OTP/WebAuthn, принудительные обязательные действия | [M] | DES | server, web | S1 |
| GSSO-FR-028 | Вкладка Roles: эффективные роли платформы с указанием источника (id grant, набор, составная роль) и срока действия grant | [M] | DES | server, web | S2 |
| GSSO-FR-029 | Вкладка Sessions: активные сессии с клиентом, IP, устройством (user agent), временем начала и последнего обращения; завершение одной или всех | [M] | DES, CAP-GSSO-03 | server, web | S1 |
| GSSO-FR-030 | Разблокировка пользователя, временно заблокированного защитой от перебора паролей (brute-force) | [M] | NEW | server, web | S1 |
| GSSO-FR-031 | Проекция пользователя (ProiectieUtilizator) обновляется по событиям, ночной полной синхронизацией и при открытии; показывает «обновлено в» | [M] | GSSO-ADR-008 | server | S1 |
| GSSO-FR-032 | sub — UUID и неизменен; изменение username и e-mail никогда не меняет sub | [M] | CAP-GSSO-01 | kc | S0 |
| GSSO-FR-033 | Атрибут пользователя locale (ro, ru, en), редактируемый пользователем и администратором; передаётся в токене | [M] | CAP-GSSO-01 | kc, server | S1 |
| GSSO-FR-034 | Пакетный импорт пользователей из CSV (с проверкой, сначала отчёт пробного запуска) | [REC] | cancelarie | server, web | S2 |
| GSSO-FR-035 | Самообслуживание через консоль учётной записи Keycloak в теме GDS: профиль, пароль, MFA, сессии, связанные учётные записи | [REC] | NEW | kc | S2 |
| GSSO-FR-036 | Время последнего входа и последней неудачной попытки для каждого пользователя по потоку событий | [REC] | DES, CRM REQ-PLT | server, web | S2 |
4. Роли и grants — FR-GRT
Section titled “4. Роли и grants — FR-GRT”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-037 | Экран ролей realm и ролей клиентов, как в дизайне: роль, описание, составная/простая, участники; роли клиентов сгруппированы по клиентам | [M] | DES | web | S1 |
| GSSO-FR-038 | Запрос на предоставление доступа (AtribuireAcces): пользователь, роль платформы или набор, необязательное организационное подразделение, validDe, validPana, обязательное обоснование; инициатор фиксируется | [M] | NEW, NFRQ56 | server, web | S2 |
| GSSO-FR-039 | Жизненный цикл grant SOLICITATA → APROBATA → ACTIVA → REVOCATA/EXPIRATA, SOLICITATA → RESPINSA обеспечивается на сервисном уровне; недопустимые переходы отклоняются с RFC 7807 invalid-transition | [M] | GSSO-ADR-006 | server | S2 |
| GSSO-FR-040 | Одобрение владельцем платформы или администратором realm; для чувствительных ролей — второй, отличный от первого, утверждающий с GSSO_APPROVER | [M] | NFRQ56, GSSO-ADR-006 | server, web | S2 |
| GSSO-FR-041 | Никто не может одобрить созданный им самим запрос или grant для самого себя | [M] | NFRQ56 | server | S2 |
| GSSO-FR-042 | ACTIVA — только после того, как reconciler подтвердит назначение роли в Keycloak; при сбое остаётся APROBATA с отображением ошибки синхронизации | [M] | GSSO-ADR-004 | server | S2 |
| GSSO-FR-043 | Отзыв с обязательным обоснованием удаляет назначение и запускает завершение сессий и gsso.access-revoked.v1 | [M] | CAP-GSSO-04 | server | S2 |
| GSSO-FR-044 | Планировщик истечения (ежечасно) переводит в статус истёкших grants с прошедшим validPana и удаляет назначения | [M] | NEW | server | S2 |
| GSSO-FR-045 | Предупреждения об истечении пользователю и владельцу платформы за 14 дней и за 1 день через GNotify | [M] | NEW | server | S2 |
| GSSO-FR-046 | Прямое предоставление администратором для нечувствительных ролей (запрос + одобрение за один шаг), фиксируется в аудите как ACORDARE_DIRECTA | [M] | NEW | server, web | S2 |
| GSSO-FR-047 | Входящие grants для каждого утверждающего: ожидающие запросы с инициатором, пользователем, ролью, обоснованием, давностью; пакетное одобрение/отклонение | [M] | NEW | web | S2 |
| GSSO-FR-048 | История grants по пользователю и по роли, с фильтрацией и экспортом (CSV) | [M] | NFRQ65 | server, web | S2 |
| GSSO-FR-049 | Назначения ролей, созданные напрямую в Keycloak (не через grant), отображаются как расхождение (MAPARE_NEGUVERNATA) | [M] | GSSO-ADR-004 | server | S2 |
| GSSO-FR-050 | Кампания пересмотра доступа: по каждой платформе владельцы подтверждают или отзывают каждый активный grant до установленного срока; неподтверждённые grants помечаются | [REC] | NFRQ56 | server, web | S5 |
| GSSO-FR-051 | Запрос grant приложением от имени пользователя через api/v1/app (например, при подключении в cancelarie) | [REC] | cancelarie, crm | server | S3 |
| GSSO-FR-052 | Правила разделения обязанностей: пары ролей, которые нельзя иметь одновременно (например, INTERDICTII_EMITENT + INTERDICTII_APROBATOR); конфликтующие запросы отклоняются или помечаются | [OPT] | NEW | server | S5 |
5. Организационные подразделения — FR-ORG
Section titled “5. Организационные подразделения — FR-ORG”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-053 | Дерево организационных подразделений realm (UnitateOrganizationala): код, название RO/RU/EN, родитель, руководитель(и) | [M] | CAP-GSSO-04 | server, web | S2 |
| GSSO-FR-054 | Атрибут пользователя org_unit (код) и claim org_unit; необязательный claim org_unit_path (коды от корня) | [M] | CAP-GSSO-04, ginsight | kc, server | S2 |
| GSSO-FR-055 | Grants могут ограничиваться организационным подразделением; при наличии ограничение передаётся в claim roles_scoped {"<ROLE>": ["<ou>"…]} | [M] | NEW | kc, server | S2 |
| GSSO-FR-056 | Импорт организационных подразделений из CSV/JSON | [REC] | NEW | server | S2 |
6. Аутентификация и федерация — FR-AUT
Section titled “6. Аутентификация и федерация — FR-AUT”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-057 | Политика аутентификации realm (PoliticaAutentificare): переключатели методов — пароль, OTP, WebAuthn, QR, client credentials, broker, magic link, как на экране дизайна «Authentication» | [M] | DES | server, web | S2 |
| GSSO-FR-058 | Browser flow отображается как упорядоченные шаги (cookie, broker, username+пароль, условный второй фактор) с требованием (alternative/required/conditional) | [M] | DES | server, web | S2 |
| GSSO-FR-059 | Условная MFA: OTP или WebAuthn обязательны, если пользователь имеет любую чувствительную роль (собственный условный authenticator или «condition – user role» на составной роли GSSO_MFA_REQUIRED) | [M] | CAP-GSSO-02, NFRQ58 | kc, server | S2 |
| GSSO-FR-060 | Парольная политика realm: длина ≥ 12, сложность, история 5, не совпадает с username/e-mail, максимальный срок действия — опционально | [M] | NFRQ58 | kc, server | S0 |
| GSSO-FR-061 | Защита от перебора паролей включена (блокировка после 5 неудачных попыток, нарастающее ожидание) | [M] | NFRQ58 | kc | S0 |
| GSSO-FR-062 | Время жизни сессий по realm и по клиенту: SSO idle 30 мин / max 10 ч для сотрудников; клиент административной консоли — 15 мин idle | [M] | NFRQ60 | kc, server | S0 |
| GSSO-FR-063 | Поставщик идентификации MPass/eID (SAML) в realm cetatean; first-broker-login связывает или создаёт пользователя по IDNP; mock IdP для тестов | [M] | NEW, drumuri | kc, server | S2 |
| GSSO-FR-064 | Федерация пользователей AD/LDAP для каждого realm (по умолчанию только чтение) с mappers атрибутов и групп | [M] | CAP-GSSO-02 | kc, server, web | S2 |
| GSSO-FR-065 | WebAuthn / passkeys (политики двухфакторной и беспарольной аутентификации) | [M] | DES | kc | S2 |
| GSSO-FR-066 | Темы GDS для входа, учётной записи и e-mail на RO/RU/EN; IBM Plex; акцент realm | [REC] | NFRQ38/40 | kc | S0 |
| GSSO-FR-067 | Вход по magic link (e-mail) только для клиентов с низким уровнем доверия | [OPT] | DES | kc | S5 |
| GSSO-FR-068 | Кросс-девайсный вход по QR с приложением gsso_mob как authenticator Keycloak (заменяет отдельный approve endpoint на каждом сайте) | [OPT] | gsso_mob, Q-GSSO-9 | kc | S5 |
| GSSO-FR-069 | Обязательные действия, настраиваемые для каждого realm: подтверждение e-mail, смена пароля, настройка OTP, условия использования | [REC] | NEW | kc, server | S2 |
| GSSO-FR-070 | Claim уровня доверия acr (1 пароль, 2 MFA, 3 MPass высокий) и step-up через acr_values для чувствительных операций | [REC] | NEW | kc | S3 |
7. Согласование (reconciliation) — FR-SYN
Section titled “7. Согласование (reconciliation) — FR-SYN”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-071 | Каждое изменение каталога, пользователя или grant создаёт JobSincronizare в той же транзакции (outbox) | [M] | GSSO-ADR-004 | server | S1 |
| GSSO-FR-072 | Рабочий процесс reconciler идемпотентно применяет задания через Keycloak Admin REST API с service account gsso-reconciler | [M] | GSSO-ADR-004 | server | S1 |
| GSSO-FR-073 | Повтор с экспоненциальной задержкой (1 с → 5 мин, 10 попыток), затем FAILED с оповещением через GNotify | [M] | NEW | server | S1 |
| GSSO-FR-074 | Полное согласование каждого realm каждые 15 мин (настраивается) и по запросу; diff управляемых типов объектов | [M] | GSSO-ADR-004 | server | S1 |
| GSSO-FR-075 | Выявленные расхождения сохраняются с JSON diff; политика realm REPORT, ENFORCE, IGNORE | [M] | NEW | server | S1 |
| GSSO-FR-076 | Управляемые объекты имеют gsso.managed=true; неуправляемые объекты никогда не удаляются, только отображаются в отчётах | [M] | NEW | server | S1 |
| GSSO-FR-077 | Экран Sync: задания (ожидающие, выполняющиеся, OK, неуспешные, расхождения) с фильтрами, повтором и «принять расхождение» (принять значение из Keycloak) | [M] | NEW | web | S1 |
| GSSO-FR-078 | Каждый объект каталога показывает в списках свой stareSync (синхронизирован, ожидает, ошибка, расхождение) | [M] | NEW | web | S1 |
| GSSO-FR-079 | Задания для realm одновременно применяет только один экземпляр reconciler (advisory lock), поэтому порядок в пределах realm сохраняется | [M] | NEW | server | S1 |
| GSSO-FR-080 | Режим пробного запуска (dry-run) для согласования и принятия под управление, формирующий отчёт без записи | [REC] | NEW | server, web | S1 |
8. События и аудит — FR-EVT
Section titled “8. События и аудит — FR-EVT”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-081 | Event listener Keycloak gsso-kafka публикует пользовательские и административные события в gsso.kc-events.v1 (CloudEvents, асинхронно, без блокировки) | [M] | GSSO-ADR-007 | kc | S2 |
| GSSO-FR-082 | Идемпотентный потребитель сохраняет события в EvenimentGsso и обновляет проекцию и агрегаты | [M] | GSSO-ADR-007 | server | S2 |
| GSSO-FR-083 | Собственные события GSSO (каталог, grant, синхронизация, действия в административной консоли) записываются в той же транзакции, что и изменение | [M] | CU-AUDIT | server | S1 |
| GSSO-FR-084 | EvenimentGsso — только добавление: в репозитории нет update/delete; триггер базы данных отклоняет UPDATE/DELETE | [M] | CU-AUDIT, NFRQ65 | server | S1 |
| GSSO-FR-085 | Хеш-цепочка для каждого realm (hashPrecedent, hash SHA-256) и endpoint проверки | [M] | NEW | server | S2 |
| GSSO-FR-086 | Пересылка каждого события в GLog с повтором и id квитанции | [M] | CU-AUDIT | server | S2 |
| GSSO-FR-087 | Дозагрузка (back-fill) из API событий Keycloak при наличии пропуска в потоке | [M] | NEW | server | S2 |
| GSSO-FR-088 | Список событий с фильтрами (тип, субъект, realm, клиент, IP, период) и детальным просмотром | [M] | DES | web | S2 |
| GSSO-FR-089 | Публикация gsso.access-revoked.v1 и gsso.user-changed.v1 для потребителей | [M] | CAP-GSSO-04 | server | S2 |
| GSSO-FR-090 | Оповещения безопасности через GNotify: блокировка администратора защитой от перебора, вход администратора из новой страны, предоставление роли GSSO_*, сбой reconciler | [REC] | NFRQ65 | server | S2 |
9. Панель мониторинга и отчёты — FR-RPT
Section titled “9. Панель мониторинга и отчёты — FR-RPT”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-091 | KPI панели мониторинга: realm, клиенты (OIDC/SAML), пользователи (прирост за сегодня), активные сессии | [M] | DES | server, web | S2 |
| GSSO-FR-092 | Входы за 24 ч в интервалах по 2 часа, успешные и неуспешные | [M] | DES | server, web | S2 |
| GSSO-FR-093 | Последние события безопасности (20 последних) с субъектом, текстом, realm, IP, временем | [M] | DES | web | S2 |
| GSSO-FR-094 | Распределение методов аутентификации за 24 ч (пароль, OTP, WebAuthn, MPass/eID, app-to-app) | [M] | DES | server, web | S2 |
| GSSO-FR-095 | Отчёт о доступе: кто какую роль имеет на какой платформе (фильтр по платформе, организационному подразделению), CSV/PDF | [REC] | NFRQ56 | server, web | S2 |
| GSSO-FR-096 | Отчёт о неактивных учётных записях: пользователи без входа в течение N дней, имеющие роли | [REC] | NEW | server, web | S5 |
10. API для приложений и набор интеграции — FR-API
Section titled “10. API для приложений и набор интеграции — FR-API”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-097 | API зоны admin, охватывающий все функции консоли; OpenAPI опубликован | [M] | CU-API-003 | server | S1 |
| GSSO-FR-098 | API зоны app с client credentials и scope gsso:app; каждое приложение видит только свою платформу | [M] | CAP-GSSO-06 | server | S3 |
| GSSO-FR-099 | Самостоятельная регистрация приложения: создание/обновление своей платформы, клиентов и ролей (если клиент приложения отмечен соответствующим признаком) | [M] | CAP-GSSO-06 | server | S3 |
| GSSO-FR-100 | Поиск пользователя по sub, username, e-mail или IDNP (IDNP — только для клиентов, разрешённых DPO) | [M] | CAP-GSSO-03, crm | server | S3 |
| GSSO-FR-101 | Запрос статуса пользователя и его ролей платформы (GET /api/v1/app/utilizatori/{sub}/roluri) | [M] | CAP-GSSO-03 | server | S3 |
| GSSO-FR-102 | Завершение сессий пользователя (DELETE /api/v1/app/utilizatori/{sub}/sesiuni) | [M] | CAP-GSSO-03 | server | S3 |
| GSSO-FR-103 | Пользователи, имеющие роль (GET /api/v1/app/roluri/{cod}/utilizatori), постранично; используется, например, gFlow для определения кандидатов | [M] | gflow | server | S3 |
| GSSO-FR-104 | gsso-spring-boot-starter: проверка resource server (issuer, JWKS, audience), roles → authorities с картой псевдонимов, GssoPrincipal, клиенты client-credentials и token exchange, deny-list отзыва, health indicator Keycloak, вспомогательный класс Testcontainers | [M] | GSSO-ADR-009 | starter | S3 |
| GSSO-FR-105 | @gstack/gsso-angular: режим PKCE или BFF, guard и директива ролей, silent refresh, single logout, синхронизация локали | [M] | GSSO-ADR-009 | ng | S3 |
| GSSO-FR-106 | Runbook и чек-лист подключения (отчёт 03 §8) и пример приложения | [M] | NEW | ops | S3 |
| GSSO-FR-107 | Вспомогательная конфигурация Kafka SASL OAUTHBEARER для сервисных клиентов | [REC] | CAP-GSSO-01 | starter | S3 |
| GSSO-FR-108 | Terraform/OpenTofu или CLI (gsso-cli) для подключения платформ из CI | [REC] | CAP-GSSO-06 | ops | S5 |
11. Консоль (UI) — FR-UI
Section titled “11. Консоль (UI) — FR-UI”| ID | Требование | Pri | Source | Component | Phase |
|---|---|---|---|---|---|
| GSSO-FR-109 | Макет GDS, как в дизайне: боковая панель с разделами Identity (Dashboard, Realms, Applications) и Access (Users, Roles, Authentication), а также Governance (Platforms, Grants, Sync, Events) | [M] | DES | web | S1 |
| GSSO-FR-110 | Переключатель языка RO/RU/EN в заголовке; все надписи переведены; предметные термины — на румынском | [M] | NFRQ38 | web | S1 |
| GSSO-FR-111 | Контекстное действие «Создать» на каждом экране (realm, клиент, пользователь, роль, grant), открывающее боковую панель с формой | [M] | DES | web | S1 |
| GSSO-FR-112 | Адаптивный макет до 360 px со сворачиваемой боковой панелью (по точкам перелома дизайна 880/480 px) | [M] | DES, NFRQ39 | web | S1 |
| GSSO-FR-113 | Таблицы с фильтрацией, сортировкой, пагинацией и пустыми состояниями; деструктивные действия требуют подтверждения с вводом имени объекта | [M] | NEW | web | S1 |
| GSSO-FR-114 | Экраны и действия скрыты или недоступны в зависимости от роли GSSO администратора и его области realm; backend обеспечивает то же самое | [M] | NFRQ56 | web, server | S1 |
| GSSO-FR-115 | Всплывающие уведомления (toast) и значки состояния синхронизации после каждого изменения (ожидает → синхронизирован) | [M] | DES | web | S1 |
| GSSO-FR-116 | Доступность WCAG 2.1 AA (клавиатура, фокус, контраст, подписи) | [M] | NFRQ39 | web | S1 |
II. Нефункциональные требования
Section titled “II. Нефункциональные требования”12. Производительность — NFR-PERF
Section titled “12. Производительность — NFR-PERF”| ID | Требование | Целевое значение | Проверка |
|---|---|---|---|
| GSSO-NFR-PERF-001 | Вход (пароль, существующий пользователь) end-to-end на Keycloak | p95 < 500 мс при 50 входах/с | нагрузочный тест |
| GSSO-NFR-PERF-002 | Endpoints списков консоли (пользователи, grants, события; 50 строк) | p95 < 800 мс при 100 000 пользователей, 1 млн событий | нагрузочный тест (NFRQ20) |
| GSSO-NFR-PERF-003 | Изменение каталога → отражено в Keycloak | p95 < 2 с, p99 < 10 с | замер в IT |
| GSSO-NFR-PERF-004 | Событие Kafka → отображается в консоли | p95 < 5 с | замер в IT |
| GSSO-NFR-PERF-005 | Накладные расходы на проверку токена в starter (кэшированный JWKS) | < 2 мс на запрос | микробенчмарк |
13. Ёмкость — NFR-CAP
Section titled “13. Ёмкость — NFR-CAP”| ID | Требование | Целевое значение |
|---|---|---|
| GSSO-NFR-CAP-001 | Пользователи-сотрудники в gstack | 20 000 |
| GSSO-NFR-CAP-002 | Пользователи-граждане в cetatean | 1 000 000 |
| GSSO-NFR-CAP-003 | Одновременные SSO-сессии | 10 000 |
| GSSO-NFR-CAP-004 | Платформы / клиенты / роли / активные grants | 100 / 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 GSSO | 99,5 % в месяц |
| GSSO-NFR-AVL-003 | Вход и выдача токенов не зависят от доступности gsso, Kafka или GLog | подтверждается chaos-тестом |
| GSSO-NFR-AVL-004 | RPO / RTO базы данных Keycloak | 15 мин / 1 ч |
| GSSO-NFR-AVL-005 | RPO / RTO базы данных GSSO | 1 ч / 4 ч; каталог может быть восстановлен через принятие под управление (adoption) |
| GSSO-NFR-AVL-006 | Мониторинг истечения TLS-сертификатов с оповещением за 21 день | тест оповещения |
15. Безопасность — NFR-SEC
Section titled “15. Безопасность — NFR-SEC”| ID | Требование |
|---|---|
| GSSO-NFR-SEC-001 | OWASP ASVS L2 для консоли, шлюза и API; OWASP Top 10 (NFRQ56/57) |
| GSSO-NFR-SEC-002 | Токены подписываются RS256 (или ES256); ротация ключей каждые 90 дней с перекрытием; HS* не допускается |
| GSSO-NFR-SEC-003 | SPA никогда не хранит токены (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-006 | IDNP шифруется при хранении в проекции, маскируется в 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-009 | SAST, 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-002 | Helm chart для целевой среды Kubernetes |
| GSSO-NFR-OPS-003 | Резервное копирование базы данных Keycloak ежедневно + перед каждым обновлением; восстановление проверяется ежеквартально |
| GSSO-NFR-OPS-004 | Обновление Keycloak допускается только после прохождения набора интеграционных тестов базовой конфигурации realm + reconciler на новой версии |
| GSSO-NFR-OPS-005 | Runbook: принятие под управление (takeover), обновление, ротация ключей, продление сертификатов, break-glass, восстановление |
19. Совместимость и стандарты — NFR-CMP
Section titled “19. Совместимость и стандарты — NFR-CMP”| ID | Требование |
|---|---|
| GSSO-NFR-CMP-001 | OpenID 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-004 | Keycloak 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 |
III. Трассируемость
Section titled “III. Трассируемость”21. Запросы возможностей от потребителей → требования
Section titled “21. Запросы возможностей от потребителей → требования”| CAP | Запрос | Требования GSSO | Phase |
|---|---|---|---|
| CAP-GSSO-01 | Корпоративный realm; конфиденциальный crm-gateway; один сервисный клиент на микросервис; Kafka OAUTHBEARER; клиенты GDocs/GLog; locale; UUID sub | FR-001, 012, 018, 020, 032, 033, 107 | S1–S3 |
| CAP-GSSO-02 | Федерация AD/LDAP, TOTP MFA в зависимости от роли | FR-059, 064 | S2 |
| CAP-GSSO-03 | Список сессий и принудительное завершение через admin API; статус и роли пользователя | FR-029, 100, 101, 102 | S1, S3 |
| CAP-GSSO-04 | Отзыв ≤ 60 с; claims организационных подразделений | FR-043, 053..055, 089; GSSO-ADR-013 | S2 |
| CAP-GSSO-06 | Автоматизируемое создание клиентов | FR-011, 098, 099, 108 | S3, S5 |
| CAP-GSSO-07 | Token exchange RFC 8693 | FR-019; GSSO-ADR-012 | S3 |
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 | Применимо, через GLog | FR-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) → требования”| NFRQ | GSSO |
|---|---|
| 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 |