Konfigurácia autentifikácie
SmartWeb podporuje viacero spôsobov prihlásenia, ktoré je možné aktivovať aj súčasne — pre klientov v prehliadači, pre server-to-server klientov aj pre gRPC klientov. Celá konfigurácia autentifikácie sa nachádza pod smartweb.authentication v súbore application.yaml.
Jednoduchá autentifikácia cez aplikačne definovaných používateľov
Autentifikácia cez D2000 používateľa s lokálnym overením klientskych certifikátov
Autentifikácia cez D2000 používateľa so vzdialeným overením klientskych certifikátov
Autentifikácia cez aplikačne definovaných používateľov s overením klientskych certifikátov
Automatická autentifikácia cez preddefinovaného D2000 používateľa bez prihlasovacieho dialógu
Podporované autentifikačné režimy
Zoznam smartweb.authentication.authModes určuje, ktoré autentifikačné mechanizmy sú aktivované. Viacero režimov je možné kombinovať; vhodný režim sa pre každú požiadavku vyberie na základe URL cesty a predložených prihlasovacích údajov. Predvolenou hodnotou je AUTH_CREDENTIALS_IN_SESSION.
Režim | Účel | Predpoklady |
|---|---|---|
| Autentifikácia menom / heslom voči kmeňovým (natívnym) D2000 používateľom — overí sa otvorením D2000 JAPI relácie (session) priamo pre daného používateľa | — |
| Autentifikácia menom / heslom delegovaná na vlastnú D2000 RPC metódu (aplikačne definovaní používatelia). JAPI relácia sa otvorí pod technickým účtom | vyžaduje technický účet |
| Automatické prihlásenie do D2000 cez preddefinovaného servisného používateľa — prihlasovací dialóg sa nezobrazuje | používa sa samostatne, nekombinuje sa s inými režimami; vyžaduje technický účet |
| X.509 klientsky certifikát, overovaný lokálne voči truststore servletového kontejnera |
|
| X.509 klientsky certifikát, overovaný vzdialene D2000 RPC metódou (certifikát zakódovaný v Base64 sa odosiela do D2000) |
|
| SPNEGO / Kerberos (Windows Integrated Authentication); SPNEGO token sa postúpi do D2000, ktoré overí Kerberos tiket a otvorí JAPI reláciu |
|
| SPNEGO / Kerberos overovaný lokálne SmartWebom voči keytabu; extrahované používateľské meno sa odovzdá do autentifikačnej metódy. Vyžaduje blok |
|
| Prihlásenie pomocou passkey (WebAuthn / FIDO2) overované lokálne SmartWebom; pozri Konfigurácia prihlásenia cez passkey |
|
| Prihlásenie cez externého poskytovateľa identít (OIDC / IAM, single sign-on). SmartWeb sám vymení authorization code za tokeny a overí ID token; pozri Prihlásenie cez OIDC / IAM (SSO) |
|
| Pripravované. Prihlásenie cez OIDC, pri ktorom authorization code overuje D2000 kernel. Zatiaľ nie je použiteľné — pozri Prihlásenie cez OIDC / IAM (SSO) |
|
[!NOTE] Povinné kombinácie režimov sú kontrolované pri štarte aplikácie. Ak konfigurácia niektorú z podmienok nespĺňa, SmartWeb sa nespustí a do logu zapíše konkrétnu chybu (napr. „When AUTH_OIDC_LOCALLY mode is specified in smartweb.authentication.authModes property, AUTH_CREDENTIALS_IN_RPC mode is required!“).
[!IMPORTANT]
Režim AUTH_AUTO_LOGON_IN_SESSION sa uvádza v authModes ako jediný. Automatické prihlásenie preddefinovaným servisným používateľom sa s ostatnými spôsobmi prihlásenia nekombinuje — všetci používatelia pracujú pod jedným D2000 účtom, takže overovanie identity ďalším režimom nemá zmysel.
[!IMPORTANT]
Režim AUTH_CREDENTIALS_IN_SESSION a parametre authSessionUsername / authSessionPassword sa navzájom vylučujú. Pri AUTH_CREDENTIALS_IN_SESSION sa relácia otvára priamo pod prihlasovaným používateľom, takže technický účet nemá zmysel a jeho uvedenie štart aplikácie zastaví. Technický účet je naopak povinný pri AUTH_AUTO_LOGON_IN_SESSION a AUTH_CREDENTIALS_IN_RPC.
Autentifikácia server-to-server klientov
Nezávisle od authModes je možné povoliť statické API kľúče pre klientov typu stroj-stroj. Uplatňujú sa na cestách /api/rest/**, /api/odata/**, /api/open/**, /api/oauth2/**, /api/opentsdb/** a v gRPC API.
Spôsob | HTTP hlavička / gRPC metadáta | Konfigurácia |
|---|---|---|
API kľúč |
|
|
Meno a heslo (HTTP Basic) |
| riadi sa nastavením |
[!NOTE]
Iný spôsob autentifikácie server-to-server klientov SmartWeb neakceptuje — hlavička Authorization: Bearer <token> sa na týchto cestách nevyhodnocuje. Prihlásenie používateľa z prehliadača cez externého poskytovateľa identít je riešené režimom AUTH_OIDC_LOCALLY, pozri Prihlásenie cez OIDC / IAM (SSO).
Konfiguračné parametre
Prehľad
smartweb:
authentication:
# Zoznam aktivovaných autentifikačných režimov (povinný). Prípustné hodnoty sú:
# AUTH_CREDENTIALS_IN_SESSION meno/heslo voči kmeňovým D2000 používateľom
# AUTH_CREDENTIALS_IN_RPC meno/heslo overuje vlastná RPC metóda aplikácie
# AUTH_AUTO_LOGON_IN_SESSION automatické prihlásenie servisným účtom (uvádza sa samostatne)
# AUTH_CERTIFICATE_LOCALLY klientsky certifikát overuje SmartWeb
# AUTH_CERTIFICATE_REMOTELY klientsky certifikát overuje D2000
# AUTH_SPNEGO_REMOTELY Kerberos tiket overuje D2000
# AUTH_SPNEGO_LOCALLY Kerberos tiket overuje SmartWeb voči keytabu
# AUTH_WEBAUTHN_LOCALLY prihlásenie pomocou passkey (WebAuthn / FIDO2)
# AUTH_OIDC_LOCALLY prihlásenie cez externý IdP, tokeny overuje SmartWeb
# AUTH_OIDC_REMOTELY prihlásenie cez externý IdP, kód overuje D2000 (pripravované)
# Prehľad predpokladov jednotlivých režimov nájdete v kapitole Podporované autentifikačné režimy.
# Nasledujúci príklad kombinuje aplikačných používateľov so vzdialeným overením certifikátu:
authModes:
- AUTH_CREDENTIALS_IN_RPC
- AUTH_CERTIFICATE_REMOTELY
# Preddefinovaný technický D2000 používateľ, pod ktorým sa otvorí JAPI relácia.
# Povinný pre AUTH_AUTO_LOGON_IN_SESSION a AUTH_CREDENTIALS_IN_RPC.
# NESMIE byť uvedený spolu s režimom AUTH_CREDENTIALS_IN_SESSION.
authSessionUsername: D2000UserName
authSessionPassword: D2000UserPassword
# Alias koreňového certifikátu v truststore — povinný pre AUTH_CERTIFICATE_LOCALLY
caCertificateAlias: SmartWebUsersCert
# Vlastná RPC metóda, ktorá overuje prihlasovacie údaje používateľa.
# Povinná pre AUTH_CREDENTIALS_IN_RPC; používa sa aj pri AUTH_CERTIFICATE_REMOTELY.
# RPC musí deklarovať OUT BOOL parameter _OK.
authRpc:
eventName: E.SMARTWEB_USER
interfaceName: I.XXX # voliteľné
methodName: authenticate
useJava: false # voliteľné
authRpcParams:
- USERNAME
- PASSWORD
- CERTIFICATE
- NONE
- _OK
# Voliteľná RPC metóda volaná po úspešnej autentifikácii
# (typické použitie: nastavenie kontextu relácie daného používateľa v D2000)
logOnRpc:
eventName: E.SW_DT_Connect
methodName: logOn
logOnRpcParams:
- USERNAME
- PASSWORD
- _OK
# Voliteľné: ak je logOnUsername vyplnené, do logOnRpc sa namiesto prihlasovaného
# používateľa odošle tento pevne určený účet
logOnUsername: D2000LogOnUser
logOnPassword: D2000LogOnPassword
# Voliteľná RPC metóda volaná pri odhlásení (zaniknutí relácie). Volá sa bez parametrov.
logOutRpc:
eventName: E.SW_DT_Connect
methodName: logOff
# Voliteľná RPC metóda volaná pri zatvorení karty/okna prehliadača (CometD spojenia)
closeTabRpc:
eventName: E.SW_DT_Connect
methodName: closeTab
closeTabRpcParams:
- USERNAME
- CONNECTION_ID
- _OK
# Autentifikácia cez API kľúč pre server-to-server REST / OData / OpenAPI / OpenTSDB / gRPC klientov
apiKeys:
enabled: true
keystore:
path: ./apikeys.p12
password: ""
# SPNEGO / Kerberos (Windows Integrated Authentication) — používa ho režim
# AUTH_SPNEGO_LOCALLY (keytab na lokálne overovanie Kerberos tiketov).
spnego:
keyTabPath: config/cert/smartweb.keytab
servicePrincipal: HTTP/smartweb.example.com@EXAMPLE.COM
debug: false
# Prihlásenie pomocou passkey — číta sa len pri režime AUTH_WEBAUTHN_LOCALLY.
# Podrobnosti na samostatnej stránke Konfigurácia prihlásenia cez passkey.
webauthn:
relyingPartyId: smartweb.example.com
relyingPartyName: SmartWeb
# Prihlásenie cez externý IdP (OIDC/IAM) — číta sa len pri režimoch AUTH_OIDC_LOCALLY
# a AUTH_OIDC_REMOTELY; pozri kapitolu Prihlásenie cez OIDC / IAM (SSO)
oidc:
registrationId: keycloak
usernameClaim: preferred_username
usernameClaimFallback: email
postLogoutRedirectUri: https://smartweb.example.com/logout.html
# Lokálny administrátor admin konzoly (nezávislý od D2000)
localAdminUsername: swadmin
localAdminPassword: changeit
# Zoznam IP adries klientov, ktoré sa smú prihlásiť do admin konzoly (podporované masky)
adminAllowedHosts:
- "*"
# Ochrana proti hádaniu hesla: po 5 neúspešných prihláseniach toho istého mena z tej istej
# IP adresy sa ďalšie pokusy na 300 sekúnd zamietnu. Blokovanie je aktívne, len ak sú
# nastavené oba parametre a oba sú väčšie ako 0; inak sa počet pokusov nesleduje.
maxFailedLoginsPerIpAddressAndUser: 5
durationFailedLoginsPerIpAddressAndUser: 300
# Koľko súbežných relácií môže mať jeden používateľ (napr. viac otvorených prehliadačov
# alebo počítačov). -1 = bez obmedzenia.
maxSessionCountWithSameUsername: -1
# Ako dlho (v milisekundách) sa čaká na vytvorenie D2000 JAPI relácie pri prihlásení.
# Po uplynutí limitu je prihlásenie zamietnuté; zvýšte pri pomalom alebo vyťaženom D2000.
japiSessionCreationTimeoutMs: 30000
# To isté pre prihlásenie cez SPNEGO/Kerberos SSO token. Je kratší zámerne: pri SSO
# čaká používateľ bez akejkoľvek interakcie, takže dlhé čakanie pôsobí ako zamrznutá stránka.
japiSessionSpnegoCreationTimeoutMs: 15000
# Povolí prihlásenie prihlasovacími údajmi zadanými v URL parametroch. Meno a heslo sa tak
# dostanú do histórie prehliadača a do logov servera — určené IBA na testovanie,
# v produkčnom nasadení ponechajte false.
allowAuthByUrlParams: falseZákladné parametre
Parameter | Povinný | Predvolená hodnota | Popis |
|---|---|---|---|
| áno |
| Zoznam aktivovaných autentifikačných režimov (pozri Podporované autentifikačné režimy). Prázdny zoznam zastaví štart aplikácie. |
| podmienene | — | Meno technického D2000 používateľa, pod ktorým sa otvorí JAPI relácia a pod ktorým sa vykonáva |
| podmienene | — | Heslo technického používateľa. Prázdna hodnota ( |
| podmienene | — | Alias koreňového (CA) certifikátu v truststore, ktorým sú podpísané klientske certifikáty. Povinný pre |
| nie | — | Meno lokálneho administrátora admin konzoly. Prihlásenie pod týmto menom sa overuje výlučne voči |
| nie | — | Heslo lokálneho administrátora (porovnáva sa bez rozlišovania veľkosti písmen). |
| nie |
| Povolí autentifikáciu API kľúčom pre server-to-server klientov. |
| nie |
| Cesta ku keystore súboru (PKCS12), v ktorom sú API kľúče uložené. Súbor je sledovaný — po zmene sa kľúče znovu načítajú bez restartu. |
| nie |
| Heslo ku keystore s API kľúčmi. |
| podmienene | — | Cesta ku Kerberos keytabu. Povinný pre |
| podmienene | — | Servisný principal SmartWebu, napr. |
| nie |
| Zapne podrobné logovanie GSS/Kerberos vrstvy. |
| nie | — | Konfigurácia prihlásenia pomocou passkey; číta sa len ak je v |
| podmienene | — | Konfigurácia prihlásenia cez externý IdP; povinná (aspoň |
RPC metódy volané pri autentifikácii
SmartWeb dokáže počas životného cyklu prihlásenia zavolať štyri RPC metódy D2000 aplikácie:
Blok | Kedy sa volá | Poznámka |
|---|---|---|
| pri overovaní prihlasovacích údajov | Povinné pre |
| po úspešnej autentifikácii a otvorení relácie | Typicky nastavenie aplikačného kontextu používateľa. Ak je vyplnené |
| pri zaniknutí relácie (odhlásenie, timeout) | Volá sa bez parametrov — RPC nesmie mať formálne parametre, a preto k nej neexistuje |
| pri zatvorení karty/okna prehliadača (zaniknutí CometD spojenia) | Volá sa štýlom „fire-and-forget“ — návratová hodnota |
[!NOTE]
Metóda logOutRpc je volaná z relácie (session) odhlasovaného používateľa, takže hoci nedostáva žiadne parametre, dokáže ho aplikácia určiť z HOBJ tejto relácie — v ESL ho vráti %GetRPCCallerProcess(). Zvyčajne sa dvojica HOBJ relácie → meno používateľa naplní pri prihlásení v logOnRpc a v logOutRpc sa podľa HOBJ dohľadá a zruší. Kompletný vzorový postup je v návode Identifikácia používateľa v RPC metóde.
Každý RPC blok je definovaný rovnakou štruktúrou:
Atribút | Povinný | Popis |
|---|---|---|
| áno | Názov D2000 eventu, napr. |
| áno | Názov RPC procedúry v evente |
| nie | Názov interfacu eventu, ak sa RPC volá cez interface |
| nie | Názov procesu, ak je potrebné adresovať konkrétnu inštanciu |
| nie |
|
Polia …RpcParams určujú poradie a význam formálnych parametrov RPC procedúry. Prípustné hodnoty:
Hodnota | Odoslaná hodnota |
|---|---|
| Prihlasovacie meno používateľa (TEXT) |
| Heslo používateľa (TEXT); |
| Klientsky certifikát zakódovaný v Base64 (TEXT); prázdny reťazec, ak certifikát nebol predložený |
| Typ autentifikácie ( |
| Režim, ktorým bol používateľ skutočne overený (TEXT), napr. |
| Všetky claimy OIDC používateľa serializované ako jeden JSON reťazec (TEXT); vyplnené len pri |
| Identifikátor spojenia (TEXT) — používa sa v |
| Kontext uzla (node) klienta (TEXT); |
|
|
| OUT parameter typu BOOL, do ktorého RPC zapíše výsledok overenia |
Limity, časové obmedzenia a admin konzola
Parameter | Predvolená hodnota | Popis |
|---|---|---|
| — (vypnuté) | Počet neúspešných prihlásení z jednej IP adresy pre jedno používateľské meno, po ktorom sa ďalšie prihlásenie zablokuje. Blokovanie je aktívne len ak sú nastavené oba parametre a oba sú väčšie ako 0. |
| — (vypnuté) | Doba blokovania v sekundách po dosiahnutí limitu neúspešných prihlásení. |
|
| Maximálny počet súbežných relácií jedného používateľského mena (viac otvorených prehliadačov alebo počítačov). Po dosiahnutí limitu je ďalšie prihlásenie zamietnuté; |
|
| Časový limit (v milisekundách) na vytvorenie D2000 JAPI relácie pri prihlásení. Po jeho uplynutí je prihlásenie zamietnuté — hodnotu zvýšte pri pomalom alebo vyťaženom D2000, prípadne pri spojení cez pomalú sieť. |
|
| To isté pre prihlásenie cez SPNEGO/Kerberos SSO token. Predvolená hodnota je zámerne kratšia: pri SSO používateľ nič nezadáva, takže dlhé čakanie pôsobí ako zamrznutá stránka. |
|
| Zoznam IP adries klientov, z ktorých je povolené prihlásenie do admin konzoly. Podporované sú masky so znakmi |
|
| Povolí prihlásenie prihlasovacími údajmi zadanými v URL parametroch. Meno a heslo sa tak dostanú do histórie prehliadača aj do logov servera — určené iba na testovanie, v produkcii nechajte vypnuté. |
Príklady konfigurácie
Jednoduchá autentifikácia cez D2000 používateľov
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_SESSIONMeno a heslo zadané v prihlasovacom dialógu sú overené otvorením D2000 JAPI relácie pre daného používateľa.
Jednoduchá autentifikácia cez aplikačne definovaných používateľov
Používatelia sú definovaní vnútri D2000 (typicky v štruktúre spravovanej ESL skriptami). Meno a heslo sú overené vlastnou RPC metódou. Konfiguruje sa tu aj logOnRpc, aby si D2000 aplikácia mohla po úspešnom prihlásení nastaviť kontext daného používateľa.
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_RPC
# Preddefinovaný D2000 technický používateľ, ktorý otvorí JAPI reláciu,
# pod ktorou sa vykoná metóda authRpc
authSessionUsername: D2000UserName
authSessionPassword: D2000UserPassword
authRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: authenticate
authRpcParams:
- USERNAME
- PASSWORD
- _OK
logOnRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: logOn
logOnRpcParams:
- USERNAME
- _OKAutentifikácia cez D2000 používateľa s lokálnym overením klientskych certifikátov
Klientske certifikáty sa overujú lokálne na strane SmartWebu. Každý klientsky certifikát musí byť uložený v truststore servletového kontejnera pod aliasom zhodným s prihlasovacím menom D2000 (rozlišujú sa veľké a malé písmená). Všetky klientske certifikáty musia byť podpísané koreňovým certifikátom uloženým pod aliasom definovaným v caCertificateAlias. HTTPS konektor vstavaného Tomcatu (pod server.ssl.*) musí byť nakonfigurovaný tak, aby vyžadoval klientsky certifikát (client-auth: REQUIRE alebo OPTIONAL).
server:
ssl:
enabled: true
key-store: config/cert/keystore.p12
key-store-password: changeit
trust-store: config/cert/truststore.p12
trust-store-password: changeit
client-auth: REQUIRE
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_SESSION
- AUTH_CERTIFICATE_LOCALLY
caCertificateAlias: SmartWebUsersCertAutentifikácia cez D2000 používateľa so vzdialeným overením klientskych certifikátov
Klientsky certifikát sa (zakódovaný v Base64) postúpi do D2000 zavolaním vlastnej RPC metódy. Truststore nakonfigurovaný na HTTPS konektore Tomcatu musí obsahovať koreňový certifikát použitý na podpis klientskych certifikátov.
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_SESSION
- AUTH_CERTIFICATE_REMOTELY
authRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: authenticate
authRpcParams:
- USERNAME
- CERTIFICATE
- _OKAutentifikácia cez aplikačne definovaných používateľov s overením klientskych certifikátov
Lokálne overenie certifikátu (AUTH_CERTIFICATE_LOCALLY):
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_RPC
- AUTH_CERTIFICATE_LOCALLY
authSessionUsername: D2000UserName
authSessionPassword: D2000UserPassword
caCertificateAlias: SmartWebUsersCert
authRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: authenticate
authRpcParams:
- USERNAME
- PASSWORD
- _OK
logOnRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: logOn
logOnRpcParams:
- USERNAME
- _OKVzdialené overenie certifikátu (AUTH_CERTIFICATE_REMOTELY) — certifikát sa odošle do authRpc:
smartweb:
authentication:
authModes:
- AUTH_CREDENTIALS_IN_RPC
- AUTH_CERTIFICATE_REMOTELY
authSessionUsername: D2000UserName
authSessionPassword: D2000UserPassword
authRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: authenticate
authRpcParams:
- USERNAME
- PASSWORD
- CERTIFICATE
- _OK
logOnRpc:
eventName: E.SW_APPLICATION_AUTH
methodName: logOn
logOnRpcParams:
- USERNAME
- _OK