Skip to content

GSSO — Cerințe funcționale și nefuncționale

Cod documentSPEC-GSSO-2026 / Raportul 02
Versiune0.1-draft (sursa EN, text care prevalează)
Data2026-10-05
StatutProiect
Rapoarte însoțitoare00 Caiet de sarcini · 01 ADR · 03 Consumatori și contract · 04 Documentație tehnică · 05 Foaie de parcurs

Prezentul raport este sursa unică de adevăr pentru cerințele GSSO. Raportul 00 doar le rezumă.

VersiuneDataModificări
0.1-draft2026-10-05Matricea inițială: GSSO-FR-001..116, 44 GSSO-NFR-, trasabilitate către CAP-GSSO-01..07, CU-, NFRQ
  • Pri:
    • [M]: obligatoriu pentru MVP sau GA.
    • [REC]: recomandat; nu blochează niciodată o poartă.
    • [OPT]: opțional sau ulterior.
  • Sursă:
    • CAP-GSSO-nn: capabilitate solicitată de un consumator (raportul CRM 03 §4.1 și pachetele gDocFlow, gTenders, gFlow și gInsight).
    • CU-*: cerință universală gStack.
    • NFRQnn: cod din caietul de sarcini.
    • DES: cerută de designul GSSO.dc.html.
    • NEW: identificată în cursul analizei platformei.
    • O etichetă de consumator (crm, interdictii, glog…) marchează o necesitate derivată din aplicația respectivă (raportul 03).
  • Componentă:
    • kc: extensii Keycloak, teme, configurații de bază ale realm-urilor.
    • server: microserviciul gsso.
    • gateway: gsso-gateway.
    • web: gsso-web.
    • starter: gsso-spring-boot-starter.
    • ng: @gstack/gsso-angular.
    • ops: compose, Helm, runbook-uri.
  • Fază (raportul 05):
    • S0: Fundație.
    • S1: MVP consolă și catalog.
    • S2: Guvernanță (atribuiri, evenimente, politici).
    • S3: Kit de integrare și pilot.
    • S4: Migrarea aplicațiilor existente.
    • S5: Extensii.
GrupID-uri[M][REC][OPT]
FR-RLM Realm-uri și tenanți001..010721
FR-CAT Catalogul de servicii011..0221020
FR-USR Utilizatori și sesiuni023..0361130
FR-GRT Roluri și atribuiri037..0521321
FR-ORG Unități organizaționale053..056310
FR-AUT Autentificare și federare057..070932
FR-SYN Reconciliere071..080910
FR-EVT Evenimente și audit081..090910
FR-RPT Tablou de bord și rapoarte091..096420
FR-API API pentru aplicații și kit de integrare097..1081020
FR-UI Consola109..116800
Total funcționale11693194
NFR (PERF 5, CAP 4, AVL 6, SEC 10, TEN 3, OBS 4, OPS 5, CMP 4, DATA 3)44
IDCerințăPriSursăComponentăFază
GSSO-FR-001Registrul realm-urilor: un GSSO_ADMIN înregistrează un realm cu nume, nume afișat, tip (STAFF, CETATEAN, TENANT, SERVICE), proprietar, politică de drift și statut; realm-ul este creat în Keycloak de către reconciliator[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-002Crearea unui realm dintr-un șablon versionat (tenant-template), care aplică fluxurile de bază, client scopes, mappers, politica de parole, temele și event listener-ul gsso-kafka[M]NEWkc, serverS1
GSSO-FR-003Activarea/dezactivarea unui realm; un realm dezactivat refuză autentificările; acțiunea necesită confirmare și este auditată[M]DESserver, webS1
GSSO-FR-004Lista realm-urilor afișează numele afișat, numele, numărul de utilizatori, numărul de clienți, federarea (broker) și statutul, ca în ecranul de design „Realms”[M]DESwebS1
GSSO-FR-005Selectorul de realm din bara laterală limitează toate ecranele la realm-ul selectat; alegerea se păstrează pentru fiecare administrator[M]DESwebS1
GSSO-FR-006Administrare limitată la realm: GSSO_REALM_ADMIN cu atributul gsso.realm=<name> vede și modifică doar acel realm[M]NEWserver, gatewayS1
GSSO-FR-007Preluarea unui realm: importul unui realm existent (de ex. interdictii) în catalog în regim doar-citire, cu politica de drift IGNORE până când proprietarul o schimbă[M]NEW, interdictiiserver, webS1
GSSO-FR-008Identitatea vizuală a realm-ului: nume afișat, logo, culoare de accent și limba implicită aplicate temei de autentificare GDS prin atributele realm-ului[REC]NEWkc, webS2
GSSO-FR-009Exportul realm-ului (configurație, fără secrete, fără utilizatori) în format JSON pentru backup și revizuire[REC]NEWserver, webS2
GSSO-FR-010Suport pentru Keycloak Organizations în cadrul unui realm, ca alternativă la atributele de unitate organizațională[OPT]NEWserverS5
IDCerințăPriSursăComponentăFază
GSSO-FR-011Registrul platformelor (Platforma): cod (litere mici, unic), nume, tip (SAAS, PAAS), descriere RO/RU/EN, proprietar(i), URL de bază, accent, statut, realm(-uri)[M]CAP-GSSO-06server, webS1
GSSO-FR-012Clienți per platformă (ClientAplicatie): clientId, protocol (OIDC, SAML), tip de acces (PUBLIC_PKCE, CONFIDENTIAL, BEARER_ONLY, SERVICE_ACCOUNT), redirect URI-uri, web origins, URI-uri post-logout, URL de back-channel logout, audiență, statut[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-013Șabloanele de client per tip de acces aplică valori implicite sigure: PKCE S256 pentru clienții publici, fără implicit flow, fără direct access grants, redirect URI-uri exacte, consimțământ dezactivat pentru aplicațiile interne[M]NFRQ56, NEWserverS1
GSSO-FR-014Rotirea secretului pentru clienții confidențiali: generare, afișare o singură dată, păstrarea valabilității secretului anterior pe o perioadă de grație (politica Keycloak de rotire a secretelor client)[M]NFRQ60server, webS2
GSSO-FR-015Clienții de tip service account primesc roluri de client sau scopes (de ex. audit:write, storage:read) declarate pe client, nu prin atribuiri[M]glog, gstorageserver, webS1
GSSO-FR-016Roluri de platformă (RolPlatforma): cod prefixat automat cu <PLATFORMA>_, descrieri RO/RU/EN, compozit (cu roluri-copil ale aceleiași platforme), indicator de rol sensibil, valabilitate implicită[M]DES, GSSO-ADR-005server, webS1
GSSO-FR-017Pachete de roluri (grupuri): seturi denumite de roluri de platformă (de ex. „Operator Cancelaria”) care pot fi atribuite printr-o singură solicitare[M]NEW, cancelarieserver, webS2
GSSO-FR-018Audience mapper per platformă: token-urile fiecărui client poartă audiența platformei sale; serverele de resurse o validează[M]CAP-GSSO-01, gregistrykc, serverS1
GSSO-FR-019Permisiuni de token exchange per client: lista audiențelor țintă pentru care un client poate face schimbul (GSSO-ADR-012)[M]CAP-GSSO-07server, webS3
GSSO-FR-020Câte un client de serviciu pentru fiecare microserviciu al unei platforme (de ex. crm-core, crm-clienti…), care poate fi creat în masă dintr-o listă[M]CAP-GSSO-01server, webS1
GSSO-FR-021Dezactivarea platformei: dezactivează toți clienții săi și suspendă atribuirile active (fără ștergere), reversibil[REC]NEWserverS2
GSSO-FR-022Fișa platformei afișează clienții, rolurile, numărul de atribuiri, proprietarii, starea sincronizării și progresul listei de verificare pentru conectare[REC]NEWwebS2
IDCerințăPriSursăComponentăFază
GSSO-FR-023Lista utilizatorilor per realm, cu căutare după nume, username, e-mail, IDNP (doar pentru rolurile autorizate), filtre după statut, MFA, rol de platformă, unitate organizațională; coloane ca în design (utilizator, e-mail, 2FA, statut, ultima autentificare)[M]DESserver, webS1
GSSO-FR-024Crearea utilizatorului: username, prenume/nume, e-mail, IDNP, unitate organizațională, limbă; trimiterea unui e-mail de invitație cu acțiuni obligatorii (verificarea e-mailului, setarea parolei, configurarea OTP dacă se atribuie un rol sensibil)[M]DES, CAP-GSSO-01server, webS1
GSSO-FR-025Editarea atributelor utilizatorului; activarea/dezactivarea utilizatorului (dezactivarea închide sesiunile)[M]DESserver, webS1
GSSO-FR-026Panoul lateral al utilizatorului cu filele Detalii, Credențiale, Roluri, Sesiuni, ca în design[M]DESwebS1
GSSO-FR-027Fila Credențiale: parolă setată/data ultimei schimbări, dispozitive OTP, chei WebAuthn; acțiuni: resetarea parolei (prin e-mail), eliminarea unei credențiale OTP/WebAuthn, impunerea acțiunilor obligatorii[M]DESserver, webS1
GSSO-FR-028Fila Roluri: rolurile de platformă efective cu sursa lor (id-ul atribuirii, pachet, compozit) și valabilitatea atribuirii[M]DESserver, webS2
GSSO-FR-029Fila Sesiuni: sesiunile active cu client, IP, dispozitiv (user agent), început și ultimul acces; închiderea uneia sau a tuturor[M]DES, CAP-GSSO-03server, webS1
GSSO-FR-030Deblocarea unui utilizator blocat temporar de protecția brute-force[M]NEWserver, webS1
GSSO-FR-031Proiecția utilizatorilor (ProiectieUtilizator) reîmprospătată prin evenimente, prin sincronizare completă nocturnă și la deschidere; afișează „reîmprospătat la”[M]GSSO-ADR-008serverS1
GSSO-FR-032sub este un UUID stabil; schimbarea username-ului sau a e-mailului nu modifică niciodată sub[M]CAP-GSSO-01kcS0
GSSO-FR-033Atributul utilizatorului locale (ro, ru, en) editabil de utilizator și de administrator; emis în token[M]CAP-GSSO-01kc, serverS1
GSSO-FR-034Importul în masă al utilizatorilor din CSV (validat, mai întâi un raport de tip dry-run)[REC]cancelarieserver, webS2
GSSO-FR-035Autoservire prin consola de cont Keycloak în tema GDS: profil, parolă, MFA, sesiuni, conturi asociate[REC]NEWkcS2
GSSO-FR-036Ultima autentificare și ultimul eșec afișate pentru fiecare utilizator, din fluxul de evenimente[REC]DES, CRM REQ-PLTserver, webS2
IDCerințăPriSursăComponentăFază
GSSO-FR-037Ecranul rolurilor de realm și al rolurilor de client, ca în design: rol, descriere, compozit/simplu, membri; rolurile de client grupate pe client[M]DESwebS1
GSSO-FR-038Solicitarea de atribuire (AtribuireAcces): utilizator, rol de platformă sau pachet, unitate organizațională opțională, validDe, validPana, motiv obligatoriu; solicitantul este înregistrat[M]NEW, NFRQ56server, webS2
GSSO-FR-039Ciclul de viață al atribuirii SOLICITATA → APROBATA → ACTIVA → REVOCATA/EXPIRATA, SOLICITATA → RESPINSA, impus în stratul de servicii; tranzițiile nepermise sunt respinse cu RFC 7807 invalid-transition[M]GSSO-ADR-006serverS2
GSSO-FR-040Aprobare de către un proprietar de platformă sau un administrator de realm; pentru rolurile sensibile, un al doilea aprobator distinct cu GSSO_APPROVER[M]NFRQ56, GSSO-ADR-006server, webS2
GSSO-FR-041Nimeni nu aprobă o solicitare creată de el însuși sau o atribuire pentru sine[M]NFRQ56serverS2
GSSO-FR-042ACTIVA doar după ce reconciliatorul confirmă maparea rolului în Keycloak; un eșec lasă APROBATA, cu eroarea de sincronizare afișată[M]GSSO-ADR-004serverS2
GSSO-FR-043Revocarea, cu motiv obligatoriu, elimină maparea și declanșează închiderea sesiunilor și gsso.access-revoked.v1[M]CAP-GSSO-04serverS2
GSSO-FR-044Planificatorul de expirare (orar) expiră atribuirile care au depășit validPana și elimină mapările[M]NEWserverS2
GSSO-FR-045Avertizări de expirare către utilizator și proprietarul platformei cu 14 zile și cu 1 zi înainte, prin GNotify[M]NEWserverS2
GSSO-FR-046Atribuire directă de către un administrator pentru rolurile nesensibile (solicitare + aprobare într-un singur pas), auditată ca ACORDARE_DIRECTA[M]NEWserver, webS2
GSSO-FR-047Inbox de atribuiri pentru fiecare aprobator: solicitări în așteptare cu solicitant, utilizator, rol, motiv, vechime; aprobare/respingere în masă[M]NEWwebS2
GSSO-FR-048Istoricul atribuirilor per utilizator și per rol, filtrabil, exportabil (CSV)[M]NFRQ65server, webS2
GSSO-FR-049Mapările de roluri create direct în Keycloak (nu printr-o atribuire) sunt raportate ca drift (MAPARE_NEGUVERNATA)[M]GSSO-ADR-004serverS2
GSSO-FR-050Campanie de revizuire a accesului: per platformă, proprietarii confirmă sau revocă fiecare atribuire activă înainte de un termen; atribuirile neconfirmate sunt semnalate[REC]NFRQ56server, webS5
GSSO-FR-051Solicitare de atribuire de către o aplicație în numele unui utilizator prin api/v1/app (de ex. la înrolarea în cancelarie)[REC]cancelarie, crmserverS3
GSSO-FR-052Reguli de separare a atribuțiilor: perechi de roluri care nu pot fi deținute simultan (de ex. INTERDICTII_EMITENT + INTERDICTII_APROBATOR); solicitările conflictuale sunt respinse sau semnalate[OPT]NEWserverS5
IDCerințăPriSursăComponentăFază
GSSO-FR-053Arborele unităților organizaționale per realm (UnitateOrganizationala): cod, nume RO/RU/EN, părinte, conducător(i)[M]CAP-GSSO-04server, webS2
GSSO-FR-054Atributul utilizatorului org_unit (cod) și claim-ul org_unit; claim opțional org_unit_path (codurile de la rădăcină)[M]CAP-GSSO-04, ginsightkc, serverS2
GSSO-FR-055Atribuirile pot fi limitate la o unitate organizațională; limitarea este emisă, când există, în claim-ul roles_scoped {"<ROLE>": ["<ou>"…]}[M]NEWkc, serverS2
GSSO-FR-056Importul unităților organizaționale din CSV/JSON[REC]NEWserverS2
IDCerințăPriSursăComponentăFază
GSSO-FR-057Politica de autentificare per realm (PoliticaAutentificare): comutatoare pentru metodele parolă, OTP, WebAuthn, QR, client credentials, broker, magic link, ca în ecranul de design „Authentication”[M]DESserver, webS2
GSSO-FR-058Fluxul de browser afișat ca pași ordonați (cookie, broker, username+parolă, al doilea factor condiționat), cu cerința aferentă (alternativ/obligatoriu/condiționat)[M]DESserver, webS2
GSSO-FR-059MFA condiționat: OTP sau WebAuthn obligatoriu când utilizatorul deține orice rol sensibil (authenticator condiționat personalizat sau „condition – user role” pe un compozit GSSO_MFA_REQUIRED)[M]CAP-GSSO-02, NFRQ58kc, serverS2
GSSO-FR-060Politica de parole per realm: lungime ≥ 12, complexitate, istoric 5, diferită de username/e-mail, vârstă maximă opțională[M]NFRQ58kc, serverS0
GSSO-FR-061Protecția brute-force activată (blocare după 5 eșecuri, așteptare incrementală)[M]NFRQ58kcS0
GSSO-FR-062Durata sesiunilor per realm și per client: SSO inactivitate 30 min / maximum 10 h pentru personal; clientul consolei de administrare 15 min de inactivitate[M]NFRQ60kc, serverS0
GSSO-FR-063Furnizor de identitate MPass/eID (SAML) în realm-ul cetatean; first-broker-login asociază sau creează utilizatorul după IDNP; IdP simulat (mock) pentru teste[M]NEW, drumurikc, serverS2
GSSO-FR-064Federarea utilizatorilor AD/LDAP per realm (implicit doar-citire), cu mappers de atribute și de grupuri[M]CAP-GSSO-02kc, server, webS2
GSSO-FR-065WebAuthn / passkeys (politici two-factor și passwordless)[M]DESkcS2
GSSO-FR-066Teme GDS pentru autentificare, cont și e-mail în RO/RU/EN; IBM Plex; accentul realm-ului[REC]NFRQ38/40kcS0
GSSO-FR-067Autentificare prin magic link (e-mail) doar pentru clienții cu nivel scăzut de asigurare[OPT]DESkcS5
GSSO-FR-068Autentificare QR între dispozitive cu aplicația gsso_mob, ca authenticator Keycloak (înlocuiește endpoint-ul de aprobare specific fiecărui site)[OPT]gsso_mob, Q-GSSO-9kcS5
GSSO-FR-069Acțiuni obligatorii configurabile per realm: verificarea e-mailului, actualizarea parolei, configurarea OTP, termeni și condiții[REC]NEWkc, serverS2
GSSO-FR-070Claim-ul de nivel de asigurare acr (1 parolă, 2 MFA, 3 MPass înalt) și step-up prin acr_values pentru operațiunile sensibile[REC]NEWkcS3
IDCerințăPriSursăComponentăFază
GSSO-FR-071Orice modificare de catalog, utilizator sau atribuire creează un JobSincronizare în aceeași tranzacție (outbox)[M]GSSO-ADR-004serverS1
GSSO-FR-072Worker-ul reconciliatorului aplică job-urile în mod idempotent prin Keycloak Admin REST API, cu service account-ul gsso-reconciler[M]GSSO-ADR-004serverS1
GSSO-FR-073Reîncercare cu backoff exponențial (1 s → 5 min, 10 încercări), apoi FAILED cu alertă GNotify[M]NEWserverS1
GSSO-FR-074Reconciliere completă per realm la fiecare 15 min (configurabil) și la cerere; diff pe tipurile de obiecte gestionate[M]GSSO-ADR-004serverS1
GSSO-FR-075Constatările de drift stocate cu un diff JSON; politică per realm REPORT, ENFORCE, IGNORE[M]NEWserverS1
GSSO-FR-076Obiectele gestionate poartă gsso.managed=true; obiectele negestionate nu sunt niciodată șterse, ci doar raportate[M]NEWserverS1
GSSO-FR-077Ecranul de sincronizare: job-uri (în așteptare, în execuție, OK, eșuate, drift) cu filtre, reîncercare și „acceptă drift-ul” (preluarea valorii din Keycloak)[M]NEWwebS1
GSSO-FR-078Fiecare obiect din catalog își afișează în liste stareSync (sincronizat, în așteptare, eșuat, drift)[M]NEWwebS1
GSSO-FR-079O singură instanță a reconciliatorului aplică job-uri pentru un realm la un moment dat (advisory lock), astfel încât ordinea per realm este păstrată[M]NEWserverS1
GSSO-FR-080Mod dry-run pentru reconciliere și preluare, care produce un raport fără scrieri[REC]NEWserver, webS1
IDCerințăPriSursăComponentăFază
GSSO-FR-081Event listener-ul Keycloak gsso-kafka publică evenimentele de utilizator și de administrare în gsso.kc-events.v1 (CloudEvents, asincron, neblocant)[M]GSSO-ADR-007kcS2
GSSO-FR-082Consumatorul idempotent stochează evenimentele în EvenimentGsso și actualizează proiecția și agregatele[M]GSSO-ADR-007serverS2
GSSO-FR-083Evenimentele proprii GSSO (catalog, atribuire, sincronizare, acțiuni în consola de administrare) sunt scrise în aceeași tranzacție cu modificarea[M]CU-AUDITserverS1
GSSO-FR-084EvenimentGsso este append-only: fără update/delete în repository; un trigger în baza de date respinge UPDATE/DELETE[M]CU-AUDIT, NFRQ65serverS1
GSSO-FR-085Lanț de hash-uri per realm (hashPrecedent, hash SHA-256) și un endpoint de verificare[M]NEWserverS2
GSSO-FR-086Redirecționarea fiecărui eveniment către GLog, cu reîncercare și id de confirmare[M]CU-AUDITserverS2
GSSO-FR-087Completare retroactivă (back-fill) din API-ul de evenimente Keycloak atunci când fluxul a avut o întrerupere[M]NEWserverS2
GSSO-FR-088Lista evenimentelor cu filtre (tip, actor, realm, client, IP, interval de timp) și vizualizare detaliată[M]DESwebS2
GSSO-FR-089Publicarea gsso.access-revoked.v1 și gsso.user-changed.v1 pentru consumatori[M]CAP-GSSO-04serverS2
GSSO-FR-090Alerte de securitate prin GNotify: blocarea brute-force a unui administrator, autentificare dintr-o țară nouă pentru administratori, atribuirea unui rol GSSO_*, eșecul reconciliatorului[REC]NFRQ65serverS2
IDCerințăPriSursăComponentăFază
GSSO-FR-091Indicatori KPI în tabloul de bord: realm-uri, clienți (OIDC/SAML), utilizatori (variația de azi), sesiuni active[M]DESserver, webS2
GSSO-FR-092Autentificările din ultimele 24 h în intervale de 2 ore, reușite vs eșuate[M]DESserver, webS2
GSSO-FR-093Evenimente de securitate recente (ultimele 20) cu actor, text, realm, IP, oră[M]DESwebS2
GSSO-FR-094Distribuția metodelor de autentificare în ultimele 24 h (parolă, OTP, WebAuthn, MPass/eID, aplicație-la-aplicație)[M]DESserver, webS2
GSSO-FR-095Raportul de acces: cine deține ce rol pe ce platformă (filtru după platformă, unitate organizațională), CSV/PDF[REC]NFRQ56server, webS2
GSSO-FR-096Raportul conturilor inactive: utilizatori fără autentificare în ultimele N zile care dețin roluri[REC]NEWserver, webS5

10. API pentru aplicații și kit de integrare — FR-API

Section titled “10. API pentru aplicații și kit de integrare — FR-API”
IDCerințăPriSursăComponentăFază
GSSO-FR-097API în zona admin care acoperă toate funcțiile consolei; OpenAPI publicat[M]CU-API-003serverS1
GSSO-FR-098API în zona app cu client credentials și scope-ul gsso:app; fiecare aplicație vede doar propria platformă[M]CAP-GSSO-06serverS3
GSSO-FR-099Autoînregistrarea aplicației: crearea/actualizarea propriei platforme, a clienților și a rolurilor (când clientul aplicației este marcat în acest sens)[M]CAP-GSSO-06serverS3
GSSO-FR-100Căutarea utilizatorului după sub, username, e-mail sau IDNP (IDNP doar pentru clienții permiși de DPO)[M]CAP-GSSO-03, crmserverS3
GSSO-FR-101Interogarea statutului utilizatorului și a rolurilor de platformă (GET /api/v1/app/utilizatori/{sub}/roluri)[M]CAP-GSSO-03serverS3
GSSO-FR-102Închiderea sesiunilor unui utilizator (DELETE /api/v1/app/utilizatori/{sub}/sesiuni)[M]CAP-GSSO-03serverS3
GSSO-FR-103Utilizatorii care dețin un rol (GET /api/v1/app/roluri/{cod}/utilizatori), paginat; folosit de ex. de gFlow la rezolvarea candidaților[M]gflowserverS3
GSSO-FR-104gsso-spring-boot-starter: validare de resource server (issuer, JWKS, audiență), roles → authorities cu hartă de alias-uri, GssoPrincipal, clienți pentru client credentials și token exchange, deny-list de revocare, indicator de sănătate Keycloak, helper Testcontainers[M]GSSO-ADR-009starterS3
GSSO-FR-105@gstack/gsso-angular: mod PKCE sau BFF, guard și directivă de rol, silent refresh, single logout, sincronizarea limbii[M]GSSO-ADR-009ngS3
GSSO-FR-106Runbook și listă de verificare pentru conectare (raportul 03 §8) și o aplicație exemplu[M]NEWopsS3
GSSO-FR-107Helper de configurare Kafka SASL OAUTHBEARER pentru clienții de serviciu[REC]CAP-GSSO-01starterS3
GSSO-FR-108Terraform/OpenTofu sau CLI (gsso-cli) pentru conectarea platformelor din CI[REC]CAP-GSSO-06opsS5
IDCerințăPriSursăComponentăFază
GSSO-FR-109Layout GDS ca în design: bară laterală cu secțiunile Identitate (Tablou de bord, Realm-uri, Aplicații) și Acces (Utilizatori, Roluri, Autentificare), plus Guvernanță (Platforme, Atribuiri, Sincronizare, Evenimente)[M]DESwebS1
GSSO-FR-110Comutator de limbă RO/RU/EN în antet; toate etichetele traduse; termenii de domeniu în limba română[M]NFRQ38webS1
GSSO-FR-111Acțiune „Creează” dependentă de context pe fiecare ecran (realm, client, utilizator, rol, atribuire), care deschide un panou lateral cu formular[M]DESwebS1
GSSO-FR-112Layout responsiv până la 360 px, cu bară laterală pliabilă (ca punctele de întrerupere din design, 880/480 px)[M]DES, NFRQ39webS1
GSSO-FR-113Tabele cu filtrare, sortare, paginare și stări goale; acțiunile distructive necesită confirmare cu numele obiectului[M]NEWwebS1
GSSO-FR-114Ecranele și acțiunile sunt ascunse sau dezactivate în funcție de rolul GSSO al administratorului și de realm-ul la care are acces; backend-ul impune aceleași reguli[M]NFRQ56web, serverS1
GSSO-FR-115Notificări toast și insigne de stare a sincronizării după fiecare modificare (în așteptare → sincronizat)[M]DESwebS1
GSSO-FR-116Accesibilitate WCAG 2.1 AA (tastatură, focus, contrast, etichete)[M]NFRQ39webS1
IDCerințăȚintăVerificare
GSSO-NFR-PERF-001Autentificare (parolă, utilizator existent) cap-coadă la Keycloakp95 < 500 ms la 50 autentificări/stest de încărcare
GSSO-NFR-PERF-002Endpoint-urile de listă ale consolei (utilizatori, atribuiri, evenimente; 50 de rânduri)p95 < 800 ms cu 100 000 de utilizatori, 1 M de evenimentetest de încărcare (NFRQ20)
GSSO-NFR-PERF-003Modificare de catalog → în Keycloakp95 < 2 s, p99 < 10 smăsurare de timp în IT
GSSO-NFR-PERF-004Eveniment Kafka → vizibil în consolăp95 < 5 smăsurare de timp în IT
GSSO-NFR-PERF-005Costul suplimentar al validării token-ului în starter (JWKS în cache)< 2 ms per cereremicrobenchmark
IDCerințăȚintă
GSSO-NFR-CAP-001Utilizatori din rândul personalului în gstack20 000
GSSO-NFR-CAP-002Utilizatori cetățeni în cetatean1 000 000
GSSO-NFR-CAP-003Sesiuni SSO concurente10 000
GSSO-NFR-CAP-004Platforme / clienți / roluri / atribuiri active100 / 1 000 / 2 000 / 200 000

14. Disponibilitate și continuitate — NFR-AVL

Section titled “14. Disponibilitate și continuitate — NFR-AVL”
IDCerințăȚintă
GSSO-NFR-AVL-001Disponibilitatea Keycloak (autentificare, token, JWKS)99,9 % lunar (disponibilitate NFRQ)
GSSO-NFR-AVL-002Disponibilitatea consolei și a API-ului GSSO99,5 % lunar
GSSO-NFR-AVL-003Autentificările și emiterea token-urilor nu depind de funcționarea gsso, Kafka sau GLogverificat prin test de haos
GSSO-NFR-AVL-004RPO / RTO pentru baza de date Keycloak15 min / 1 h
GSSO-NFR-AVL-005RPO / RTO pentru baza de date GSSO1 h / 4 h; catalogul poate fi reconstruit prin preluare
GSSO-NFR-AVL-006Expirarea certificatelor TLS monitorizată, cu alertă cu 21 de zile înaintetest de alertă
IDCerință
GSSO-NFR-SEC-001OWASP ASVS L2 pentru consolă, gateway și API; OWASP Top 10 (NFRQ56/57)
GSSO-NFR-SEC-002Token-uri semnate RS256 (sau ES256); rotirea cheilor la fiecare 90 de zile, cu suprapunere; HS* nu este permis
GSSO-NFR-SEC-003SPA-ul nu deține niciodată token-uri (BFF); cookie de sesiune HttpOnly, Secure, SameSite=Lax; protecție CSRF
GSSO-NFR-SEC-004Credențialele gsso-reconciler doar în depozitul de secrete; permisiunile sale limitate la manage-realm, manage-users, manage-clients, view-events ale realm-urilor gestionate (fără administrator master)
GSSO-NFR-SEC-005Niciun secret în git; secretele clienților afișate o singură dată; secretele criptate la stocare în baza de date GSSO, dacă sunt stocate (de preferat să nu fie stocate)
GSSO-NFR-SEC-006IDNP criptat la stocare în proiecție, mascat în UI, cu excepția rolului GSSO_IDNP_VIEW
GSSO-NFR-SEC-007Antete de securitate (CSP, HSTS, X-Frame-Options, Referrer-Policy) pe gateway și pe temele Keycloak (NFRQ56)
GSSO-NFR-SEC-008Clientul consolei de administrare: MFA obligatoriu, inactivitate a sesiunii 15 min
GSSO-NFR-SEC-009SAST, SCA, scanarea secretelor și SBOM în CI (/gsast), DAST de bază (/gtest) — NFRQ90/91
GSSO-NFR-SEC-010Limitarea ratei pe API-ul app (per client) și pe endpoint-urile de autentificare, la nivel de ingress
IDCerință
GSSO-NFR-TEN-001Fiecare rând din tabelele GSSO poartă realm; fiecare interogare a unui administrator limitat la un realm este filtrată pe server
GSSO-NFR-TEN-002Clientul gsso:app al unei aplicații poate citi și modifica doar obiectele propriei platforme
GSSO-NFR-TEN-003Testele demonstrează că niciun endpoint nu expune datele altui realm sau ale altei platforme (probă cu matricea de autorizare)
IDCerință
GSSO-NFR-OBS-001/health/live, /health/ready (DB, Kafka, Keycloak), /metrics (Prometheus), /info pe gsso și gsso-gateway; /health și /metrics activate în Keycloak
GSSO-NFR-OBS-002Metrici: job-uri de sincronizare pe stări, durata reconcilierii, numărul de drift-uri, întârzierea evenimentelor, întârzierea redirecționării către GLog, autentificări/eșecuri per realm
GSSO-NFR-OBS-003Log-uri JSON structurate cu trace id; fără token-uri, secrete sau IDNP în log-uri (NFRQ35/50)
GSSO-NFR-OBS-004Alerte: reconciliator eșuat, întârzierea evenimentelor > 5 min, Keycloak indisponibil, expirarea certificatelor, rata erorilor
IDCerință
GSSO-NFR-OPS-001Stivă locală pornită cu o singură comandă (docker compose up) și instalare documentată pe gazda demo
GSSO-NFR-OPS-002Chart Helm pentru ținta Kubernetes
GSSO-NFR-OPS-003Backup zilnic al bazei de date Keycloak + înainte de fiecare actualizare; restaurarea testată trimestrial
GSSO-NFR-OPS-004Actualizarea Keycloak condiționată de trecerea suitei de teste de integrare pentru configurația de bază a realm-urilor + reconciliator pe noua versiune
GSSO-NFR-OPS-005Runbook-uri: preluare, actualizare, rotirea cheilor, reînnoirea certificatelor, break-glass, restaurare

19. Compatibilitate și standarde — NFR-CMP

Section titled “19. Compatibilitate și standarde — NFR-CMP”
IDCerință
GSSO-NFR-CMP-001OpenID Connect Core 1.0, practicile OAuth 2.1 (PKCE, fără implicit), RFC 8693, RFC 7807, SAML 2.0
GSSO-NFR-CMP-002Standardul API GovStack: zone api/v1, endpoint-uri de sănătate, OpenAPI, Idempotency-Key pe POST (verificat de api_audit.py)
GSSO-NFR-CMP-003Stiva DEV-PLAYBOOK §2, versiunile fiind cele generate de JHipster 9.1.0
GSSO-NFR-CMP-004Keycloak 26.6.x; extensiile construite pe aceeași versiune SPI

20. Protecția și păstrarea datelor — NFR-DATA

Section titled “20. Protecția și păstrarea datelor — NFR-DATA”
IDCerință
GSSO-NFR-DATA-001Date cu caracter personal minimizate la: username, nume, e-mail, IDNP (opțional), unitate organizațională, limbă
GSSO-NFR-DATA-002Evenimentele sunt păstrate 90 de zile în GSSO, apoi eliminate (drop de partiție); GLog păstrează urma conform propriei politici
GSSO-NFR-DATA-003Ștergerea utilizatorului se propagă: proiecția este eliminată, referințele la actor sunt înlocuite cu sub

21. Solicitările de capabilități ale consumatorilor → cerințe

Section titled “21. Solicitările de capabilități ale consumatorilor → cerințe”
CAPSolicitareCerințe GSSOFază
CAP-GSSO-01Realm corporativ; client confidențial crm-gateway; câte un client de serviciu pentru fiecare microserviciu; Kafka OAUTHBEARER; clienți GDocs/GLog; locale; sub UUIDFR-001, 012, 018, 020, 032, 033, 107S1–S3
CAP-GSSO-02Federare AD/LDAP, MFA TOTP în funcție de rolFR-059, 064S2
CAP-GSSO-03Lista sesiunilor și închiderea forțată prin API-ul de administrare; statutul și rolurile utilizatoruluiFR-029, 100, 101, 102S1, S3
CAP-GSSO-04Revocare ≤ 60 s; claim-uri de unitate organizaționalăFR-043, 053..055, 089; GSSO-ADR-013S2
CAP-GSSO-06Provizionarea automatizabilă a cliențilorFR-011, 098, 099, 108S3, S5
CAP-GSSO-07Token exchange RFC 8693FR-019; GSSO-ADR-012S3

22. Cerințe universale (CU-*) → cerințe

Section titled “22. Cerințe universale (CU-*) → cerințe”
CUStatut pentru GSSOCerințe
CU-AUTH-001 (autentificare)Furnizată de GSSO tuturor aplicațiilor; consola o foloseșteFR-057..070; NFR-SEC-002, 003, 008
CU-AUTH-002 (semnătură)N/A — MSign / gsso_mob—
CU-AUTH-003 (sesiuni)AplicabilăFR-029, 062, 102; GSSO-ADR-013
CU-RBAC-001..003Aplicabilă — GSSO este sursa RBAC pentru toate aplicațiileFR-016, 037..052, 114
CU-AUDIT-001..003Aplicabilă, prin GLogFR-081..090
CU-OBS-001..004AplicabilăNFR-OBS-001..004
CU-API-003..006Aplicabilă — obligatorieFR-097, 098; NFR-CMP-002
CU-MSG-001Aplicabilă (Kafka, consumatori idempotenți)FR-081, 082, 089
CU-DATA-001..003AplicabilăNFR-DATA-001..003, NFR-AVL-004/005
CU-DEPLOYAplicabilăNFR-OPS-001..005
NFRQGSSO
NFRQ20–22 performanțăNFR-PERF-001..005
NFRQ35/50/51 jurnalizareFR-081..090, NFR-OBS-003
NFRQ38 multilingvismFR-066, 110
NFRQ39 accesibilitateFR-112, 116
NFRQ40 design unificat (GDS)FR-066, 109
NFRQ56–66 securitateFR-013, 014, 040, 041, 059..062, NFR-SEC-*
NFRQ90–93 testare și acceptanțăNFR-SEC-009, raportul 04 §12, test-scenarios.md