HTTP: prijava
Vsi postopki prijave v prehod z njihovimi pravili in odgovori, samopostrežba za lastne ključe in pravilnik prijave z 2FA (dvostopenjskim preverjanjem identitete). Model v ozadju pojasnjuje Prijava in posredovanje identitete.
Sintaksa
| Navedba | Pomen |
|---|---|
X-Api-Key: <ključ storitve ali osebni ključ> | osnovna prijava; ime glave po Security:ApiKeyHeader |
Authorization: Negotiate … | račun Windows |
Authorization: Basic … | prijava SQL Server ali osebni ključ kot geslo |
X-Wkl-Session: <seja> | 2FA, poleg osnovne prijave |
X-Wkl-Role: <identiteta> | izbira identitete podatkovne zbirke |
POST /auth/v1/totp[/{alias}] | koda v zameno za sejo |
POST /auth/v1/enrol[/{alias}] | nastavitev 2FA ob prvi prijavi |
GET /self/v1/[{alias}/]keys | samopostrežba: lastni ključi |
POST /self/v1/[{alias}/]issue-key | samopostrežba: izdaja ključa |
POST /self/v1/[{alias}/]revoke-key | samopostrežba: preklic ključa |
Parametri
Prijava z računom Windows
Poleg ključa storitve se lahko klicatelj prijavi s svojim računom Windows prek HTTP Negotiate (Kerberos ali, kjer Kerberos ni na voljo, NTLM). To je namenjeno osebam: Access prek gonilnika ODBC ter Excel ali Power BI se prijavijo kot uporabnik, ki jih izvaja. Nikjer ni shranjen ključ ali geslo, revizijska sled pa navaja osebo namesto imena ključa.
"Security": {
"AuthMode": "ApiKey, Windows",
"ApiKeys": [ { "Client": "fachanwendung", "Key": "env:FACHANWENDUNG_SCHLUESSEL" } ],
"WindowsAccounts": [
{ "Account": "FIRMA\\Fachdaten-Leser", "Client": "fachdaten-lesen" },
{ "Account": "FIRMA\\Fachdaten-Pflege", "Client": "fachdaten-pflege" },
{ "Account": "S-1-5-32-545", "Client": "auskunft" }
],
"Clients": [
{ "Id": "fachanwendung", "Databases": [ "fachdaten" ], "Resources": [ "*" ], "Verbs": [ "*" ] },
{ "Id": "fachdaten-lesen", "Databases": [ "fachdaten" ], "Resources": [ "views" ], "Verbs": [ "GET" ], "ReadOnly": true },
{ "Id": "fachdaten-pflege", "Databases": [ "fachdaten" ], "Resources": [ "*" ], "Verbs": [ "*" ] },
{ "Id": "auskunft", "Databases": [ "fachdaten" ], "Resources": [ "views" ], "Verbs": [ "GET" ], "ReadOnly": true }
]
}
| Pravilo | Razlog |
|---|---|
AuthMode navaja postopke, ločene z vejico: ApiKey, Windows, SqlLogin, PersonalKey v poljubni kombinaciji | Programi obdržijo svoj ključ, osebe se prijavijo z računom Windows ali s prijavo SQL Server |
Vnos pod WindowsAccounts računu ali skupini dodeli pravila klicatelja pod Clients | Pravice so vezane na skupine, kot ste vajeni v sistemu Windows; oseba jih dobi prek svojega članstva |
| Pravice več vnosov se seštevajo; pravilo samo za branje ne omejuje drugega pravila | Tako skupine delujejo povsod v sistemu Windows. Kdor sme samo brati, ne sme biti član nobene skupine s pravico pisanja |
| Primerjava poteka prek SID; ime se ob zagonu pretvori v SID | Preimenovana skupina obdrži svoje pravice. Ime, ki ne obstaja, prepreči zagon, namesto da bi brez opozorila ne dodelilo ničesar |
Vgrajene skupine navedite z njihovim SID (S-1-5-32-545 namesto VORDEFINIERT\Benutzer) | Njihova imena so odvisna od jezika namestitve sistema Windows. SID se preveri le po obliki |
| Poslani ključ storitve odloča sam | Izrecnega dokaza ne preglasi implicitni; napačen ključ da 401, tudi če je zraven prijava Windows |
| Prijavljena oseba brez ustreznega vnosa ne doseže ničesar, enako kot ključ brez pravila | Revizijska sled navaja, kdo je poskušal. Ob 401 bi Office znova vprašal za podatke za prijavo, ki jih je oseba že predložila |
| Skupine, ki jih Windows vodi le za zavračanje, ne štejejo | Na primer skupina skrbnikov pri uporabniku brez povišanih pravic; če bi jih šteli, bi dodelili, kar Windows odreka |
Na zahtevo brez prijave prehod odgovori z 401 in WWW-Authenticate: Negotiate; šele nato se
odjemalec prijavi z računom Windows. Vsaka nova povezava se zato začne z zahtevo brez prijave, ki
je zapisana v revizijski sledi kot anonym … UNAUTHENTICATED (401). To je prvi korak postopka, ne napaka. Nato prijava
velja za celotno povezavo.
Kerberos zahteva SPN
HTTP/<ime-računalnika> za račun, pod katerim teče prehod; če ga ni, Windows preide na NTLM.
Prijava s prijavo SQL Server (HTTP Basic)
Uporabniki, ki so se v SQL Server doslej prijavljali z imenom in geslom, se z isto prijavo prijavijo
v prehod: prek HTTP Basic, torej z imenom in geslom v glavi Authorization. Prehod gesla ne preverja
sam in ga ne shrani. Z imenom in geslom odpre povezavo s strežnikom naslovljenega aliasa, odloči
pa SQL Server, kot pri neposredni povezavi. Vsi stavki zahteve se nato izvajajo prek povezav te
prijave: dovoljenja, privzete vrednosti stolpcev in sprožilci vidijo samo to prijavo, tudi ORIGINAL_LOGIN().
"Databases": [
{ "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…",
"AllowSqlLogins": true }
],
"Security": {
"AuthMode": "ApiKey, Windows, SqlLogin",
"SqlLogins": [
{ "Login": "*", "Client": "fachdaten-lesen" },
{ "Login": "pflege1", "Client": "fachdaten-pflege" }
],
"TrustedProxies": [ "10.0.0.5" ]
}
| Pravilo | Razlog |
|---|---|
AuthMode vsebuje SqlLogin, alias pa sprejema prijave SQL Server samo z AllowSqlLogins | Katera podatkovna zbirka preveri ime in geslo, je odločitev za vsak alias. Alias brez stikala prijavi SQL Server odgovori kot neznan alias (401); odgovor ne razkrije, kateri aliasi obstajajo |
| Strežnik in podatkovna zbirka izhajata iz niza povezave aliasa; ime in geslo nadomestita le njegovo prijavo | Klicatelj podatkovne zbirke ne izbira, kot povsod v prehodu |
Vnos pod SqlLogins prijavi (Login: njeno ime ali * za vsako) dodeli pravila klicatelja pod Clients; pravice več vnosov se seštevajo | Pravila ostanejo zunanja pregrada: kateri aliasi, vrste virov in metode HTTP so dosegljivi prek HTTP. Znotraj odločajo pravice prijave v SQL Serverju |
| Prijava se preveri, preden se upoštevajo pravila in katalog | Sicer bi kdor pozna ime, ne pa gesla, iz odgovorov prepoznal, kateri objekti obstajajo |
Samo prek zaščitene povezave: HTTPS, posredniški strežnik iz TrustedProxies, ki pošlje X-Forwarded-Proto: https, ali zahteva z istega računalnika. Sicer 403, brez poskusa z geslom | Basic pošlje geslo z vsako zahtevo. X-Forwarded-Proto poljubnega odjemalca ne šteje, zaupanja vreden posredniški strežnik na istem računalniku pa zahteve od zunaj ne naredi lokalne |
Največ 5 neuspelih poskusov na prijavo in alias ter 20 na izvor v eni minuti; nato 429, tudi s pravilnim geslom. Za neuspel poskus šteje tudi poskus, na katerega strežnik ne da berljivega odgovora (503) | SQL Server šteje neuspele poskuse samo za prijave s pravilnikom gesel, omejevanje hitrosti prehoda pa učinkuje šele po prijavi. Tudi brez berljivega odgovora je strežnik geslo morda že preveril |
| Geslo se ne pojavi niti v dnevniku niti v besedilni predstavitvi klicatelja | Je le v pomnilniku zahteve in v bazenu povezav; SqlClient za vsako prijavo vodi lasten bazen |
Poslani ključ storitve ima prednost pred Basic, Basic pred Windows; zavrnjeno geslo da 401 brez preklopa na Windows | Izrecnega dokaza ne preglasi implicitni |
Brez prijave odgovor 401 navede vsak vklopljeni postopek: WWW-Authenticate: Negotiate in WWW-Authenticate: Basic realm="Wkl.Data.Gateway", charset="UTF-8" | Odjemalec izbere, kar zna; charset mu pove, da se ime in geslo bereta kot UTF-8 |
| Odgovor | Pomen |
|---|---|
401 „Es wurde keine gültige Anmeldung vorgelegt.“ (Predložena ni bila nobena veljavna prijava.) | Ime ali geslo je napačno, prijava je neznana ali zaklenjena ali pa alias ne sprejema prijav SQL Server. Odgovor teh primerov namenoma ne razlikuje; dnevnik navede številko napake SQL Serverja (na primer 18456) |
403 „SQL-Anmeldungen nimmt der Dienst nur über eine verschlüsselte Verbindung an.“ (Prijave SQL Server prehod sprejema samo prek šifrirane povezave.) | Geslo je nezaščiteno prišlo z drugega računalnika |
403 „Diese Anmeldung hat keinen Zugang zur Datenbank des Alias.“ (Ta prijava nima dostopa do podatkovne zbirke aliasa.) | SQL Server je prijavo sprejel, podatkovne zbirke aliasa pa ni odprl (4060) |
403 „Die Datenbank verweigert dieser Anmeldung den Vorgang.“ (Podatkovna zbirka tej prijavi zavrne dejanje.) | Prijavi manjka dovoljenje (napaka 229, 230, 262, 297, 300 ali 916) |
429 „Zu viele fehlgeschlagene Anmeldungen; bitte später erneut versuchen.“ (Preveč neuspelih prijav; poskusite znova pozneje.) | Dosežena je meja neuspelih poskusov |
Osebni ključi
Osebni ključ pripada osebi, ne programu. Ne potrebuje domene, gesla SQL ali dodatne
infrastrukture, zato deluje povsod, kjer je prehod dosegljiv. Osebe in ključi so v
skrbniški shrambi; postopek jo potrebuje in
ga vklopite s PersonalKey:
"Security": { "AuthMode": "ApiKey, PersonalKey" },
"Store": { "Path": "store/gateway.db", "MasterKey": "env:WKL_GW_MASTER_KEY", "MaxKeyLifetimeDays": 365 }
Ključ gre v isto glavo kot ključ storitve (X-Api-Key, glejte ApiKeyHeader). Vsak odjemalec,
ki zna poslati ključ storitve (gonilnik ODBC z APIKEY/APIKEYENV, skript, orodje za poročila),
brez sprememb pošlje tudi osebnega. Ključa loči predpona. Osebni ključ velja tudi kot geslo HTTP Basic
(ime se ne preverja; priporočeno je pkuser, glejte spodaj): Excel in Power BI takšne podatke za
prijavo (način prijave „Basic“) shranita v lastno upravljanje poverilnic, glavo pa bi bilo treba
zapisati v poizvedbo in s tem v vsak delovni zvezek. Oblika ključa ga loči od gesla prijave SQL Server.
<a id=„uporabnisko-ime-pkuser“></a>Uporabniško ime pkuser (dogovor). Kdor osebni ključ vpiše kot
geslo, kot uporabniško ime navede pkuser (personal key user). To ni obvezno: prehod ključ
prepozna po njegovi obliki (wkl_…), ne po imenu, in sprejme vsako ime. Enotno ime ima kljub temu
prednosti:
- V upravljanju poverilnic Excela, Power BI in sistema Windows je na prvi pogled vidno, da gre za osebni ključ in ne za prijavo SQL Server.
- Po telefonu zadošča „uporabniško ime
pkuser, geslo vaš ključ“, brez pojasnjevanja, katero ime je mišljeno. - Nihče ne vpiše imena iz drugega sistema in ga nato ne zamenja za del dostopa.
V SQL Serverju ne ustvarite prijave pkuser: geslo brez oblike ključa prehod preveri kot prijavo SQL
Server s tem imenom.
| Lastnost | Določitev | Razlog |
|---|---|---|
| Oblika | wkl_ + 43 naključnih znakov (256 bitov, črke in števke) + 6 kontrolnih znakov, skupaj 53 znakov | Orodja za iskanje gesel in ključev po fiksni predponi in dolžini najdejo ključ v izvorni kodi in dnevnikih; kontrolni znaki razkrijejo tipkarsko napako brez poizvedbe |
| Shranjevanje | samo SHA-256 ključa, javni identifikator (k + 8 znakov) in zadnji 4 znaki | S kopijo datoteke ni mogoče poslati nobene veljavne zahteve. Pri 256 bitih naključnosti zadošča SHA-256; počasen postopek za gesla bi vsaki zahtevi vzel čas in ničesar ne bi zaščitil |
| Prikaz | enkrat, ob izdaji | Nato ga ima le še imetnik |
| Pravice | pravila (Clients), dodeljena osebi; ključ omejuje in nikoli sam ne podeljuje: aliasi, samo branje, omrežja (From/ExceptFrom) | Ključ za Excel na tujem računalniku dobi le, kar potrebuje, brez lastnega pravila |
| Veljavnost | datum poteka za vsak ključ; brez navedbe najdaljša veljavnost Gateway:Store:MaxKeyLifetimeDays (privzeto 365, 0 = brez poteka); daljša je zavrnjena | Pozabljen ključ na starem računalniku sam preneha delovati |
| Zaklepanje | zaklepanje ključa ali izklop osebe velja od naslednje zahteve, brez ponovnega nalaganja in brez ponovnega zagona | Ključ se pri vsaki zahtevi poišče v shrambi (indeksni dostop do lokalne datoteke); ni predpomnilnika, iz katerega bi zaklenjen ključ še naprej učinkoval |
| Več na osebo | da, za vsako napravo ali namen z oznako | Izgubljen prenosnik stane en ključ, ne vseh |
| Dokazilo | revizijska sled: Person (Kennung); „zadnja uporaba“ s časom in izvorom za vsak ključ | Kdo je ravnal in kateri ključ je treba zakleniti |
| Identiteta v SQL Serverju | Če ima oseba lastno prijavo (--login) in alias Persons: Impersonate (kar zahteva Windows v AuthMode), zahteva teče pod njo (EXECUTE AS LOGIN, velja DenyImpersonate). Sicer pod prijavo aliasa. V obeh primerih je oseba samo za branje v kontekstu seje: SESSION_CONTEXT(N'wkl.person'), SESSION_CONTEXT(N'wkl.key') | Sprožilci, privzete vrednosti stolpcev in pogledi lahko vprašajo, kdo je ravnal, tudi brez lastne prijave. Bazen povezav kontekst pred naslednjo zahtevo ponastavi |
| Ključi storitve | nikoli ne zamenjajo identitete | Program ni oseba |
„Zadnja uporaba“ se zbira in zapiše vsakih 60 sekund ter ob zaustavitvi, ne pri vsaki zahtevi: vsako pisanje v datoteko bi prehod spodbudilo k ponovnemu branju. Ob sesutju se izgubi največ ena minuta statistike, nikoli pa pooblastilo. Pisanj, ki ne spremenijo obratovalnih podatkov (uporaba, ključi, osebe), prehod ne obravnava kot nove različice in jih ne sporoči.
Upravljanje oseb in ključev – prek skrbniškega vmesnika ali na računalniku
prehoda z ukazi save-person, issue-key, revoke-key in list-keys; izvedejo se s konfiguracijo in
okoljem prehoda, tudi medtem ko prehod teče. Klic, možnosti in izhodne kode so opisani v
Ukazi na strežniku: osebe in ključi. Ti ukazi ne pišejo v
dnevnik sprememb (kdor jih izvede, ima tako ali tako dostop do datoteke); ukazi za odklepanje
init-admin, reset-totp in remove-sign-in-rule pa vanj pišejo, z izvajalcem „Konsole (Rechner,
Konto)“ (konzola (računalnik, račun)).
| Odgovor | Pomen |
|---|---|
401 „Der persönliche Schlüssel ist unbekannt.“ (Osebni ključ je neznan.) | Takšnega ključa ni ali pa gre za tipkarsko napako |
401 „Persönliche Schlüssel sind an diesem Dienst nicht eingerichtet.“ (Osebni ključi v tem prehodu niso nastavljeni.) | PersonalKey v AuthMode ni vklopljen |
403 „Die Person zu dieser Anmeldung ist gesperrt.“ (Oseba te prijave je zaklenjena.) | Račun Windows ali prijava SQL Server pripadata zaklenjeni osebi. Če isti račun pripada več osebam, prehod tega ne preveri |
401 „… ist abgelaufen.“ (… je potekel.) / „… ist gesperrt.“ (… je zaklenjen.) / „… ruht; er gilt nur, solange die Verwaltung ihn freigeschaltet hat.“ (… miruje; velja le, dokler ga ima skrbništvo odobrenega.) / „Die Person zu diesem Schlüssel ist gesperrt.“ (Oseba tega ključa je zaklenjena.) | Stanje ključa ali osebe. To razlikovanje izve le, kdor ključ ima; ugibanje ključev je brez možnosti za uspeh |
403 „Dieser persönliche Schlüssel gilt nicht für diese Herkunft.“ (Ta osebni ključ ne velja za ta izvor.) | Ključ navaja omrežja, zahteva pa prihaja od drugod ali pa njenega izvora ni mogoče ugotoviti |
403 „Der Zugriff auf diese Ressource ist nicht freigegeben.“ (Dostop do tega vira ni odobren.) | Pravila osebe ali omejitev ključa (alias, samo branje) |
403 „Die SQL-Server-Anmeldung dieser Person gibt es nicht.“ (Prijava SQL Server te osebe ne obstaja.) | --login navaja prijavo, ki je SQL Server ne pozna; prehod ne preklopi nazaj na prijavo aliasa |
Ključi na zahtevo
Ključ je mogoče izdati tako, da miruje, dokler ga skrbništvo ne omogoči za določen čas, na primer ključ samo za branje brez 2FA, ki ga oseba v Power BI shrani za predstavitve upravi. Ključ ostane pri vseh omogočitvah isti, zato Power BI ni treba znova nastavljati. Zunaj omogočenega časa ne omogoča nobenega dostopa, tudi če je ostal v poročilu, na prenosniku ali v e-pošti.
| Korak | Kako |
|---|---|
| Izdaja | issue-key z "onDemand": true; ključ miruje od izdaje |
| Omogočitev | activate-key { "id", "hours" }; po izteku se konča sama. Nova omogočitev nadomesti tekočo |
| Predčasni konec | deactivate-key { "id" }; velja od naslednje zahteve |
| Najdaljše trajanje | max_activation_hours (množica Settings), sicer Gateway:Store:MaxActivationHours, privzeto 12, od 1 do 168. Nikoli prek datuma poteka ključa |
Omogoči ga lahko samo skrbništvo, ne oseba sama; oboje je zapisano z izvajalcem in koncem v dnevniku
sprememb. Najdaljša veljavnost ključa (MaxKeyLifetimeDays) še naprej velja: po njej je potreben nov
ključ.
Samopostrežba
Oseba, ki se lahko prijavi na drug način (s svojim računom Windows ali svojo prijavo SQL Server), si osebne ključe izda sama, na primer za Excel na prenosniku, in jih tudi zaklene. Skrbništvo mora samopostrežbo le enkrat omogočiti.
| Naslov | Telo | Odgovor |
|---|---|---|
GET /self/v1/keys | – | 200 { person, keys: [...], maximumDays }; za vsak ključ identifikator, oznaka, zadnji 4 znaki, samo branje, aliasi, izdaja, potek, zaklepanje, zadnja uporaba – nikoli ključ |
POST /self/v1/issue-key | { "label", "expiresAt"?, "readOnly"?, "databases"? } | 201 s key, enkrat; Cache-Control: no-store |
POST /self/v1/revoke-key | { "id" } | 200; za tuj ali že zaklenjen ključ prehod odgovori z 404, ne da bi razkril, ali obstaja |
…/self/v1/{alias}/… | kot zgoraj | isto za prijavo SQL Server: njeno geslo SQL Server preveri na viru podatkov, zato ga naslov navede |
| Pravilo | Razlog |
|---|---|
Samo z računom Windows ali prijavo SQL Server, dodeljeno prek lastnega računa oz. lastne prijave osebe (Persons.WindowsAccount, Persons.SqlLogin); skupina ni oseba | Osebni ključ ne more izdajati ključev: ukraden ključ bi se sicer lahko sam obnavljal mimo svojega poteka in zaklepa. Ključ storitve ne pripada nobeni osebi |
Izklopljeno, dokler skrbništvo nastavitve self_service_key_days (množica Settings) ali Gateway:Store:SelfServiceKeyDays ne nastavi na več kot 0 | Ali si osebe smejo same ustvarjati dostope, odloča skrbništvo |
Sam izdan ključ vedno poteče: brez navedbe po self_service_key_days, najpozneje po krajši od te vrednosti in MaxKeyLifetimeDays | Ključe brez poteka izdaja samo skrbništvo |
Omejiti ga je mogoče na samo branje in na aliase, ne pa z omrežji ali z izjemo od 2FA (400) | Oboje je odločitev skrbništva |
| Pravice so pravila osebe, kot pri vsakem osebnem ključu | Samopostrežba ničesar ne razširi |
Pravilnik prijave samopostrežbo obravnava kot skrbništvo (obseg Admin); nova shramba tam zahteva 2FA | Kdor izdaja dostope, opravlja skrbništvo, čeprav le za lastni dostop. S privzetim pravilom oseba potrebuje nastavljen 2FA in sejo (/auth/v1/totp, za prijavo SQL Server /auth/v1/totp/{alias}) |
Samo prek zaščitene povezave, kot skrbništvo; izdaja in zaklepanje sta zapisana v dnevniku sprememb kot Person (Selbstbedienung) | Odgovor vsebuje ključ |
„WklGatewayClient – razred VBA za podatkovni prehod“ (dokumentacija aplikacije za upravljanje) za to ponuja OwnKeys, IssueOwnKey in RevokeOwnKey.
Pravilnik prijave in 2FA
Pravilnik prijave določa, kateri postopek prijave za kateri del prehoda iz katerih omrežij
ali držav potrebuje 2FA ali je zavrnjen, na primer „osebni ključi iz omrežja podjetja brez kode,
od zunaj samo s TOTP“, „prijave SQL Server nikoli od zunaj“ ali „dostop do podatkov samo iz Nemčije“.
Shranjen je v skrbniški shrambi in ga urejate prek množic
SignInRules, SignInRuleItems, SignInRuleExceptions, SignInRuleExceptionItems in Settings
skrbniškega vmesnika; brez shrambe so mogoče le zavrnitve
(Gateway:Security:SignInRules v konfiguracijski datoteki).
| Polje pravila | Vrednosti | Pomen |
|---|---|---|
Scope | All (privzeto), Data, Admin | Del: podatkovni vmesniki ali skrbništvo |
Method | Any (privzeto), ApiKey, PersonalKey, Windows, SqlLogin | Postopek prijave klicatelja |
Effect | RequireTotp (privzeto), Deny | Potreben 2FA ali zavrnitev |
From / ExceptFrom | omrežja, kot je 10.0.0.0/8, ali ime lastnega omrežja iz `Gateway:SignInLog:Networks` | Izvor; prazno = vsak. Ime velja za vsa omrežja, ki so tam navedena pod njim; neznano ime prepreči zagon. Izvor, ki ga ni mogoče ugotoviti, je v obsegu vsakega pravila |
Persons / ExceptPersons | osebe (ime; v shrambi Id, značilnost person/except_person) | Samo za te osebe oz. ne zanje; prazno = vsak klicatelj. Potrebuje skrbniško shrambo |
WindowsGroups / ExceptWindowsGroups | skupine Windows (ime ali SID) | Samo za člane oziroma ne zanje; znano le pri prijavi z računom Windows. Neznana skupina prepreči zagon |
Countries / ExceptCountries | kode držav po ISO 3166-1 alpha-2, kot sta DE, TH (velike in male črke niso pomembne) | Samo za zahteve iz teh držav oziroma ne zanje; prazno = vsaka država. Država, ki je ni mogoče ugotoviti, je v obsegu pravila. Koda, ki ni iz dveh črk, prepreči zagon |
Operators / ExceptOperators | operaterji omrežja kot avtonomni sistemi, na primer AS3320 (tudi 3320) | Samo za zahteve iz omrežij teh operaterjev oz. ne zanje; prazno = vsak. Operater, ki ga ni mogoče ugotoviti, je v obsegu pravila (glejte Po operaterju omrežja, programu in času) |
Clients / ExceptClients | vrsta programa, na primer Power Query, WinHTTP, Browser, PowerShell | Samo za zahteve, ki navajajo ta program, oz. ne zanje; prazno = vsak. Podatek navaja odjemalec; zahteva brez User-Agent je v obsegu pravila |
Hours / ExceptHours | časovna okna, na primer Mon-Fri 06:00-20:00, Sat,Sun, 22:00-06:00 | Samo ob teh časih oz. ne ob njih; prazno = kadar koli. Ura prehoda v časovnem pasu Gateway:SignInLog:TimeZone. Okno, ki ga ni mogoče prebrati, prepreči zagon |
Exceptions | seznam izjem (glejte spodaj) | Zahteve, ki hkrati izpolnjujejo vse značilnosti izjeme, so pravila oproščene, po želji le do določenega časa |
Label | besedilo | Opomba, brez učinka |
Mode | Enforce (privzeto), Report | Uveljavitev ali le preizkus. Pravilo v preizkusu se ovrednoti pri vsaki prijavi, vendar ne spremeni nobene odločitve; dogodek prijave zabeleži, kako bi pravilo odločilo (glejte Preizkus pravila) |
Za posamezne osebe ali skupine. Pravilo je mogoče omejiti na osebe ali skupine Windows ali pa jih iz
njega izvzeti, na primer „od zunaj nihče, razen Franka Mustermanna“:
{ Scope: Data, Effect: Deny, ExceptFrom: [10.0.0.0/8], ExceptPersons: [Frank Mustermann] }.
Osebo prehod prepozna po njenem osebnem ključu, njenem lastnem računu Windows ali njeni prijavi SQL
Server; skupino le pri prijavi z računom Windows. Klicatelj, ki ni dodeljen nobeni osebi (ključ storitve), ne
spada pod nobeno takšno pravilo in pod nobeno izjemo. Kaj pravilo pomeni za osebo, prikaže
explain-sign-in skrbniškega vmesnika.
Po državi. Državo zahteve prehod prebere iz geolokacijske zbirke dnevnika prijav: v pomnilniku, brez dostopa do omrežja in samo, če kakšno pravilo navaja države. Zahteva nima države, če geolokacijska zbirka ni naložena, če pride s tega računalnika, iz lastnega omrežja (`Gateway:SignInLog:Networks`) ali iz zasebnega omrežja ali če zbirka naslova ne pozna. Takšna neznana država je v obsegu vsakega pravila: „dostop do podatkov samo iz Nemčije“ jo zavrne. Lastna omrežja zato izvzemite z njihovimi naslovi, ne z državo:
{ "Scope": "Data", "Effect": "Deny", "Label": "samo Nemčija",
"ExceptCountries": [ "DE" ], "ExceptFrom": [ "10.0.0.0/8" ] }
Pomembno: Država, izpeljana iz naslova, je ocena, ne dokaz. VPN, posredniški strežnik ali mobilno omrežje lahko izvor premakne v drugo državo, geolokacijske zbirke pa se pri posameznih omrežjih motijo. Pravila po državi so dodatna plast poleg ključev, omrežij in 2FA; nobenega od njih ne nadomeščajo.
Po operaterju omrežja, programu in času
Pravilo lahko sprašuje tudi po operaterju omrežja, iz katerega pride zahteva, po programu in po uri. Te tri značilnosti niso enako zanesljive:
| Značilnost | Vir vrednosti | Zanesljivost | Neznana, če |
|---|---|---|---|
| Operater omrežja | datoteka ASN geolokacijske zbirke dnevnika prijav, prebrana le, če kakšno pravilo navaja operaterje | opažena: prehod jo izpelje iz naslova; večinoma zanesljiva, VPN jo premakne | datoteka ASN ni naložena, lasten ali zaseben naslov, naslov neznan |
| Program | User-Agent zahteve, združen kot v dnevniku prijav (Power Query, WinHTTP, Browser, PowerShell, sicer prva beseda) | navedba odjemalca: vsak program lahko pošlje katero koli besedilo; Excel in Power BI Desktop pošiljata isto | brez User-Agent (gonilnik ODBC ga ne pošilja) |
| Čas | ura prehoda v časovnem pasu Gateway:SignInLog:TimeZone (prazno: pas strežnika) | opažena | nikoli |
Neznan operater ali manjkajoč program je kot neznana država v obsegu pravila in ne izpolni nobene značilnosti izjeme. Program, ki ga odjemalec le navaja, je zato primeren za omejevanje („skrbništvo samo iz WinHTTP“ zavrne brskalnik). Kot edina značilnost izjeme pa oprosti vsakogar, ki pošlje to besedilo; v izjemi ga zato povežite z osebami, omrežji ali koncem veljavnosti.
Časovno okno zapišete kot [dnevi] [hh:mm-hh:mm]:
- Dnevi
Mon,Tue,Wed,Thu,Fri,Sat,Sunkot seznam (Sat,Sun) ali razpon (Mon-Fri, tudiFri-Mon); brez dni velja vsak dan. - Ure z izključnim koncem;
24:00je konec dneva; brez ur velja ves dan. - Okno čez polnoč (
Mon-Fri 22:00-06:00) pripada dnevu, ko se začne: od petka ob 22.00 do sobote ob 6.00 je v njem, ponedeljek ob 3.00 ni.
„Prijava SQL Server samo od ponedeljka do petka, od 6.00 do 20.00“:
{ "Method": "SqlLogin", "Effect": "Deny", "Label": "SQL samo v delovnem času",
"ExceptHours": [ "Mon-Fri 06:00-20:00" ] }
„Iz omrežij drugih operaterjev samo z 2FA, iz obrata 3 nikoli“:
{ "Scope": "Data", "Effect": "RequireTotp", "Label": "koda iz tujih omrežij",
"ExceptOperators": [ "AS3320" ], "ExceptFrom": [ "Obrat 3" ] }
Lastna in zasebna omrežja nimajo operaterja omrežja. Brez ExceptFrom bi pravilo kodo zahtevalo tudi
v obratu.
Dogodek prijave v Signals navaja ocenjenega operaterja omrežja (operator), program (client) in pod
trust za vsak signal, kako zanesljiv je (observed, claimed, verified).
Časovno omejene izjeme. Seznami ExceptPersons, ExceptCountries in ExceptFrom izvzemajo vsak
zase in trajno: ExceptPersons: [Frank Mustermann] Franka oprosti v vsaki državi. Izjema v Exceptions
pa oprosti le, če hkrati veljajo vse njene značilnosti, na primer „Frank Mustermann s Tajske do
- novembra„:
{ "Scope": "Data", "Effect": "Deny", "Label": "samo Nemčija",
"ExceptCountries": [ "DE" ], "ExceptFrom": [ "10.0.0.0/8" ],
"Exceptions": [ { "Persons": [ "Frank Mustermann" ], "Countries": [ "TH" ],
"Until": "2026-11-02T00:00:00Z", "Label": "dopust" } ] }
| Polje izjeme | Vrednosti | Pomen |
|---|---|---|
Persons | osebe (ime; v shrambi Id) | Klicatelj je ena od njih; prazno = vsak |
WindowsGroups | skupine Windows (ime ali SID) | Klicatelj je član ene od njih; prazno = vsak |
Countries | kode držav kot zgoraj | Zahteva pride iz ene od njih; prazno = vsaka država |
From | omrežja, kot je 203.0.113.0/24, ali imena lastnih omrežij | Izvor je v enem od njih; prazno = vsak |
Operators | operaterji omrežja, na primer AS3320 | Izvor pripada enemu od njih; prazno = vsak |
Clients | vrsta programa kot zgoraj | Zahteva navaja enega od njih; prazno = vsak. Podatek navaja odjemalec |
Hours | časovna okna kot zgoraj | Zahteva je v enem od njih; prazno = kadar koli |
Until | trenutek v UTC, na primer 2026-11-02T00:00:00Z | Od tega trenutka izjema ne oprosti nikogar več; prazno = brez konca. Vrednost brez časovnega pasu velja kot UTC |
Label | besedilo | Opomba, brez učinka |
- Vsaj ena značilnost ali konec. Izjema brez obojega bi trajno oprostila vsakogar; preverjanje ob zagonu in skrbniški vmesnik jo zavrneta.
- Neznano nikoli ne oprosti. Neznana država, neznan izvor, neznan operater omrežja, manjkajoč program ali klicatelj, ki ni dodeljen nobeni osebi, ne izpolni nobene značilnosti, ki to preverja. Brez geolokacijske zbirke izjema po državi torej ne velja, namesto da bi odprla pravilo.
- Konec velja takoj. Prehod ga ob vsaki zahtevi primerja s svojo uro; sprememba za to ni potrebna. Ko konec opazi, ga enkrat zapiše v dnevnik sprememb (
Entityexception-lapsed, izvajalecDienst (Ablauf), prejšnje stanje: pravilo, opomba in konec). Potekla izjema ostane, dokler je ne odstranite.
Previdno pri ustvarjanju zavrnitve. Pravilo velja, takoj ko je shranjeno. Kdor zavrnitev za vse
obsege najprej ustvari brez izjem in značilnosti doda pozneje, se v tistem trenutku sam zaklene.
Zavrnitve zato ustvarjajte s save-sign-in-rule skrbniškega vmesnika,
ki pravilo in izjeme shrani v eni spremembi; če se je to zgodilo, pomaga remove-sign-in-rule na
strežniku.
Šteje vsako ustrezno pravilo, zavrnitev ima prednost pred vsem drugim; vrstni red nima pomena.
Izjema: izmenjavo kode in nastavitev 2FA (/auth/v1/totp, /auth/v1/enrol) prehod presoja samo po
pravilih z obsegom All; zavrnitev samo za Data ali Admin tam ne prepreči nobenega poskusa. Prijavo
SQL Server pa SQL Server preveri, preden pravilnik presodi: iz zavrnjenega izvora napačno geslo
odgovori z 401, pravilno pa s 403; napadalec torej izve, ali je geslo pravilno, omeji ga le meja
neuspelih poskusov. Če ne velja nobeno pravilo, odločajo le pravice. Pravilnik se ne uporablja v
razvojnem okolju brez prijave; pravilnik, ki je zaklenil skrbništvo, popravijo
ukazi na strežniku. Nova shramba vsebuje pravilo
„skrbništvo samo z 2FA“ (Scope: Admin, Effect: RequireTotp); kot vsako drugo ga je mogoče
spremeniti ali izbrisati. Ne glede na to fiksna spodnja meja Gateway:Store:RequireAdminTotp
(privzeto true) zahteva 2FA za skrbništvo in samopostrežbo, pri vsakem postopku prijave in z
vsakega izvora; tudi ključ s TotpExempt je ne odpravi. Izklopiti jo je mogoče samo v
konfiguracijski datoteki. Preverjanje ob zagonu zavrne RequireTotp za ključe storitve, saj program
ni oseba in nima 2FA; namesto tega zapišite Deny.
2FA s kodami TOTP. Časovno odvisne kode po RFC 6238 (6 mest, 30 sekund), kot jih ustvari vsaka
aplikacija Authenticator. 2FA pripada osebi: osebni ključ jo navede; račun Windows in prijava
SQL Server jo najdeta prek njenega lastnega računa (WindowsAccount) oziroma njene lastne prijave
(SqlLogin); primerja se samo ime prijave, brez razlikovanja velikih in malih črk, prek vseh aliasov
in strežnikov, zato tako odprta seja ne velja le za alias, na katerem je bila koda izmenjana. Skupina
ni oseba; prijava, ki se ne ujema z nobeno osebo ali se ujema z dvema, prejme 403, če je zahtevan
2FA. Nastavi ga skrbništvo (enroll-totp), najbolje z enkratno povezavo: stran prikaže naslov
otpauth:// kot kodo QR in poleg nje ključ za ročni vnos. Skrivnost je zapečatena v shrambi (z
lastnim namenom, ob zamenjavi glavnega ključa jo reseal-store na novo šifrira).
Nastavitev ob prvi prijavi. Če oseba 2FA še ni nastavila, pravilnik pa 2FA zahteva, lahko oseba nastavitev nekaj časa opravi sama, z osnovno prijavo (prvi faktor), ki do tedaj velja samo za to:
POST /auth/v1/enrol[/{alias}] osnovna prijava kot pri izmenjavi kode
Telo: { } 200: { "person", "secret", "uri", "qrPng", "openUntil" }
Telo: { "code": "123456" } 201: kot pri izmenjavi - nastavitev 2FA končana, seja odprta
- Kdaj. V roku
totp_enrol_hours(množicaSettings, sicerGateway:Security:TotpEnrolHours, privzeto 24, največ 168,0izklopi nastavitev ob prijavi) po izdaji ključa, s katerim pride zahteva; za osebo brez ključa (račun Windows) do časa, ki sta ga na strežniku nastavilainit-adminalireset-totp. - Zakaj rok. Dokler oseba ne nastavi 2FA, jo predstavlja ključ sam. Kdor ga v tem času prestreže, bi lahko nanj vezal svojo aplikacijo Authenticator. Rok ta čas ohranja kratek; ključ, ki je čakal predolgo, je treba izdati znova.
- Enkrat. Potrditev konča rok in je zapisana v dnevniku sprememb; osebi z nastavljenim 2FA se nastavitev ne ponudi več. Če ga je kdo drug nastavil prej, zakoniti imetnik to opazi prav po tem. Nov 2FA tedaj nastavi skrbništvo.
- Dva koraka. Brez kode prehod ustvari podatke za izračun kod in odgovori z naslovom, ključem za ročni vnos in kodo QR kot PNG; zapečateni se shranijo šele s prvo ustrezno kodo. Nov klic brez kode nadomesti ustvarjene podatke.
- Na vsako drugo zahtevo osebe prehod do tedaj odgovori z
401inWWW-Authenticate: Wkl-Totp realm="Wkl.Data.Gateway", enrol="/auth/v1/enrol". Aplikacija za upravljanje tedaj prikaže kartico za nastavitev; razred VBAWklGatewayClientsporočigwErrEnrolmentRequiredin ponudiBeginTotpEnrolment/ConfirmTotpEnrolment.
Koda v zameno za sejo. Koda velja 30 sekund; gonilnik, ki tabelo bere po straneh, je ne more
zahtevati pri vsaki zahtevi. Koda se zato enkrat zamenja za sejo, ki se nato v glavi
X-Wkl-Session pošlje z vsako zahtevo:
POST /auth/v1/totp osnovna prijava: osebni ključ ali račun Windows
POST /auth/v1/totp/{alias} osnovna prijava: prijava SQL Server (Basic), preverjena na tem aliasu
Telo: { "code": "123456" } po želji z "role": "vertrieb"
201: { "session": "…", "id": "t…", "person": "…", "header": "X-Wkl-Session", "expiresAt": "…" }
Če telo navaja role, je seja vezana na to
identiteto podatkovne zbirke: zahteva brez lastne
izbire teče pod njo. Izbira se preveri pri vsaki zahtevi, ne pri izmenjavi.
- Seja ni prijava. Vsaka zahteva še naprej vsebuje osnovno prijavo; seja velja le za osebo, postopek in (pri ključu) ključ, s katerim je bila odprta. Ukraden žeton sam ne omogoča dostopa. Zato se uporablja lastna glava namesto
Authorization: Bearer, saj ta pri Windows in Basic že prenaša osnovno prijavo. - Trajanje
totp_session_hours(množicaSettings, sicerGateway:Security:TotpSessionHours), privzeto 10 ur, od 1 do 168. - Konec: potek;
RevokedvSessionTokens; zaklepanje ključa; izklop osebe; nova nastavitev ali odstranitev njenega 2FA. Preveri se pri vsaki zahtevi. - Koda velja enkrat (njen časovni korak mora biti poznejši od nazadnje sprejetega) in en korak (30 sekund) pred uro prehoda ali za njo; ta toleranca je fiksna in je ni mogoče nastaviti. Pet napačnih kod na osebo oziroma dvajset na izvor v 15 minutah vodi do
429. Števci so v pomnilniku: ponovni zagon jih ponastavi, kdor pa pozna ime, lahko osebo z napačnimi poskusi za nekaj časa zaklene. - Izmenjava je mogoča samo prek zaščitene povezave (HTTPS, zaupanja vreden posredniški strežnik s
https, isti računalnik).
Odjemalci brez pogovornega okna (Power BI, Excel, skripti) ne morejo zahtevati kode. Zanje
obstajajo ključi s TotpExempt: izvzeti so iz zahteve po 2FA, ne pa iz zavrnitve, in so dovoljeni
samo kot ključi samo za branje. S pravicami, ki osebo omejijo na odobrene poglede, in po
želji z vezavo na omrežje je to ozko omejen dostop za poročila.
| Odgovor | Pomen |
|---|---|
401 z WWW-Authenticate: Wkl-Totp realm="Wkl.Data.Gateway", endpoint="/auth/v1/totp" | Potreben 2FA: seje ni ali ni veljavna. Pri prijavi SQL Server endpoint navede alias (/auth/v1/totp/{alias}). Gonilnik ODBC kodo zahteva v pogovornem oknu in sejo hrani, dokler proces teče |
401 „Der Code ist falsch oder wurde schon benutzt.“ (Koda je napačna ali je bila že uporabljena.) | Izmenjava zavrnjena |
403 „Die Anmelderichtlinie lässt dieses Anmeldeverfahren von dieser Herkunft nicht zu.“ (Pravilnik prijave tega postopka prijave iz tega izvora ne dovoli.) | Pravilo Deny. Odgovor ne navaja države; dnevnik prijav zavrnitev, ki temelji samo na pravilih z državami, zabeleži z razlogom deniedByCountry, sicer z denied |
401 z WWW-Authenticate: Wkl-Totp realm="Wkl.Data.Gateway", enrol="/auth/v1/enrol" | Pravilnik zahteva 2FA, oseba pa 2FA še ni nastavila; to lahko stori zdaj |
403 „… gehört zu keiner Person“ (… ne pripada nobeni osebi) / „… ist keiner eingerichtet, und die Frist … ist abgelaufen.“ (… ni nastavljen, rok … pa je potekel.) | Pravilo zahteva 2FA, uporaba 2FA pa ni mogoča |
403 „Ein zweiter Faktor wird nur über HTTPS oder vom eigenen Rechner angenommen.“ (Koda 2FA se sprejme samo prek HTTPS ali z istega računalnika.) | Izmenjava prek nezaščitene povezave |
429 | Preveč napačnih kod |
Preizkus pravila
Novo pravilo – predvsem zavrnitev – najprej preizkusite z Mode = Report. Pravilo se tedaj pri vsaki
prijavi ovrednoti, kot da bi bilo uveljavljeno, vendar ničesar ne spremeni: kdor bi bil brez njega
sprejet, ostane sprejet.
Dogodek prijave ga v Rules navede z "mode": "report"; SignInRuleReports za vsako pravilo in
različico prešteje, koliko prijav bi zadelo, od koliko oseb in izvorov in katere bi oprostila izjema
(glejte Skrbništvo).
explain-sign-in ga prikaže ločeno pod tried.
Če je rezultat ustrezen, pravilo uveljavite z ukazom save-sign-in-rule in "mode": "Enforce"; od tedaj
velja. Preklop je zapisan v dnevniku sprememb in spremeni različico pravila, tako da je dogodke iz
preizkusa mogoče ločiti od dogodkov iz rednega delovanja. Spodnja meja skrbništva (RequireAdminTotp) ni pravilo in je ni
mogoče preizkusiti.