Konfiguration des Dienstes (Referenz)
Jeder Konfigurationsschlüssel des Dienstes unter Gateway mit Vorgabe und Wirkung. Die Werte kommen
aus appsettings.json, appsettings.<Umgebung>.json, Umgebungsvariablen, Startparametern und
appsettings.Local.json; bei gleichem Schlüssel gilt die spätere Quelle, appsettings.Local.json
also vor allen anderen; mit einem Verwaltungsspeicher stehen die Betriebsdaten (Datenquellen, Regeln,
Zuordnungen) dort statt in der Datei. Eine Konfiguration, die die Startprüfung nicht besteht, verhindert
den Start; das Protokoll nennt jeden Fehler.
Syntax
{
"Gateway": {
"Databases": [ { "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…" } ],
"MetadataCacheSeconds": 300,
"ResponseCompression": true,
"Security": { "AuthMode": "ApiKey, Windows", "ApiKeys": [], "Clients": [] },
"Limits": { "DefaultTop": 1000, "MaxTop": 10000 },
"Store": { "Path": "store/gateway.db", "MasterKey": "env:WKL_GW_MASTER_KEY" },
"Certificate": { "Subject": "daten.example.com" },
"Downloads": { "Path": "downloads" }
},
"Kestrel": { "Endpoints": { } }
}
Als Umgebungsvariable mit doppeltem Unterstrich: Gateway__Databases__0__ConnectionString.
Parameter
Inhaltsstamm
Die Dateien appsettings*.json und jeder relative Pfad dieser Seite beziehen sich auf den
Inhaltsstamm des Dienstes: als Windows-Dienst der Programmordner, sonst das Arbeitsverzeichnis beim
Start (unter systemd WorkingDirectory). Der Startparameter --contentRoot <ordner> setzt ihn
ausdrücklich.
Geheimnisse und Verweise
appsettings.json beschreibt die Form und die Voreinstellungen und enthält keine
Verbindungszeichenfolge und keinen Schlüssel. Beides gehört zur betriebenen Instanz:
appsettings.Local.jsonim Inhaltsstamm – der Dienst liest sie in jeder Umgebung; in der Entwicklung ist sie git-ignoriert, im Betrieb trägt sie etwa den Wechsel des Hauptschlüssels;- Umgebungsvariablen (
Gateway__Databases__0__ConnectionString) im Dienstbetrieb.
Schlüssel werden ausschließlich als Verweis konfiguriert:
| Verweis | Bedeutung |
|---|---|
env:NAME | Prozessumgebungsvariable. Die empfohlene Form |
file:PFAD | Inhalt der Datei, ohne Leerraum am Anfang und Ende. Für ein Geheimnis in einer Datei, die nur das Dienstkonto lesen darf |
plain:wert | Literal. Nur für die Entwicklung |
vault:name | Reserviert; wird nicht aufgelöst und gilt damit als Verweis, der sich nicht auflösen lässt |
Ein Verweis, der sich nicht auflösen lässt, verhindert den Start. Das ist beabsichtigt: eine nicht gesetzte Umgebungsvariable würde sonst als Aufrufer auftreten, der sich unerklärlich nicht anmelden kann.
Gateway
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
TransactionIdleSeconds | 120 | Wie lange eine Transaktion, die ein Client geöffnet hat, ungenutzt bleiben darf, bevor der Dienst sie zurücknimmt. Jede Anfrage in ihr beginnt die Frist neu |
MaxTransactionsPerCaller | 4 | Wie viele Transaktionen ein Aufrufer zugleich offen halten darf; jede weitere wird mit 429 abgewiesen |
MetadataCacheSeconds | 300 | Wie lange der Ressourcenkatalog einer Datenbank gilt. Ein neues Objekt ist innerhalb dieser Zeit erreichbar, nicht sofort; nach Ablauf antwortet die nächste Anfrage mit dem bisherigen Stand und der Katalog wird im Hintergrund erneuert |
ResponseCompression | true | Antworten mit Brotli oder gzip packen, wenn der Aufrufer Accept-Encoding nennt; siehe unten |
Komprimierte Antworten (Gateway:ResponseCompression, Vorgabe true): Nennt der Aufrufer
Accept-Encoding, packt der Dienst jede Antwort mit Brotli oder gzip auf der schnellsten Stufe –
auch über HTTPS. JSON wiederholt in jeder Zeile die Spaltennamen und lässt sich deshalb stark
packen; über eine langsame Leitung verkürzt das die Ladezeit großer Tabellen deutlich. Der Treiber
und Power Query entpacken von sich aus. Zum Angriff BREACH, der komprimierte
HTTPS-Antworten ausnutzt (RFC 7457, Abschnitt 2.6):
Er braucht ein Geheimnis in derselben Antwort wie ein vom Angreifer gewählter Text und einen
Browser mit selbsttätiger Anmeldung. Datenantworten tragen nur
die angefragten Daten; die Antworten auf den Austausch und die Einrichtung des zweiten Faktors und auf
das Ausstellen eines Schlüssels tragen aber ein Geheimnis und werden ebenfalls komprimiert. Wer eine Browseranwendung mit Windows-Anmeldung vom selben
Ursprung bedient und die Frage ausschließen will, schaltet den Schalter ab.
Gateway:Databases
Je Eintrag ein Alias. Mit Verwaltungsspeicher stehen die Datenquellen dort (Menge DataSources).
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
Name | – | Alias, unter dem Aufrufer die Datenbank ansprechen; der einzige Teil, der den Prozess verlässt |
Enabled | true | Abgeschaltet antwortet der Alias wie ein unbekannter; Regeln bleiben stehen |
Provider | – | Kennung des Providers, der die Datenbank anbindet; mitgeliefert ist sqlserver. Leer: es gilt Dialect. Ein nicht installierter oder bei der Prüfung abgewiesener Provider verhindert den Start; der Dienst weicht nie auf einen anderen aus |
ProviderVersion | – | Feste Fassung des Provider-Pakets; leer: die höchste gültige installierte Fassung |
ProviderOptions | leer | Einstellungen, die der Provider festlegt und dokumentiert, als Name/Wert; einen unbekannten Namen weist die Prüfung des Providers ab. Der mitgelieferte SQL-Server-Provider braucht keine. Provider, ProviderVersion und ProviderOptions gibt es ebenso für Datenquellen im Verwaltungsspeicher (Menge DataSources); welche Provider installiert sind und welche Eigenschaften sie beschreiben, zeigen die Mengen Providers und ProviderProperties (Verbindungseigenschaften eines Providers) |
Dialect | mssql | Ältere Angabe, gilt nur ohne Provider: mssql ist ein Zweitname des Providers sqlserver; ein unbekannter Wert verhindert den Start |
ConnectionString | – | Verbindungszeichenfolge; nie in ein Repository |
AllowPassThrough | false | Eigene Anweisungen an diesem Alias, siehe Eigene Anweisungen freischalten |
AllowCheckedStatements | true | Geprüfte Anweisungen für Aufrufer ohne das Recht sql: Verbünde, Funktionen und Mengenänderungen über Objekte, die ihre Regeln freigeben, siehe Geprüfte Anweisungen; false lehnt sie ab |
AllowSqlLogins | false | SQL-Anmeldungen per HTTP Basic an diesem Alias, siehe SQL-Anmeldung einrichten |
RowStampTables | leer | Tabellen mit berechnetem Zeilenstempel (schema.tabelle, schema.*, *), siehe Zeilenstempel einschalten |
KeylessWriteTables | leer | Tabellen ohne Schlüssel, die über ihre alten Werte geschrieben werden dürfen, siehe Tabellen ohne Schlüssel freigeben |
Persons | Service | Service oder Impersonate: ob eine Person – mit Windows-Konto oder persönlichem Schlüssel angemeldet – in SQL Server unter ihrer eigenen Anmeldung läuft; Wirkung je Verfahren unter Anmeldung und Weitergabe der Identität, Einrichtung unter Personen an SQL Server weitergeben. Impersonate verlangt Windows in AuthMode, sonst verweigert der Dienst den Start. |
DenyImpersonate | leer | Sperrliste je Eintrag Logins, Roles, From, ExceptFrom; gilt auch für Datenbank-Identitäten, siehe Identität |
Namensregel für den Alias
Der Alias (Name) wird Teil jeder Adresse (/odata/v4/<alias>/…, /api/v1/cf/<alias>/…) und
wird gegen die Regeln der Aufrufer verglichen. Deshalb gilt für ihn dieselbe Regel wie für einen
gewöhnlichen Bezeichner von SQL Server, ohne Schema-Teil:
| Merkmal | Regel |
|---|---|
| Länge | 1 bis 128 Zeichen (UTF-16-Codeeinheiten; ein Zeichen außerhalb der Basisebene, etwa ein Emoji, zählt doppelt und ist ohnehin nicht zulässig) |
| Erstes Zeichen | ein Buchstabe (jede Schrift, auch ä, ß) oder _ |
| Weitere Zeichen | Buchstaben, Ziffern, _, @, #, $ |
| Nicht zulässig | Leerzeichen, Punkt, Bindestrich, Schrägstrich und jedes andere Zeichen; eine Ziffer, @, # oder $ am Anfang |
| Groß-/Kleinschreibung | ohne Bedeutung: Fachdaten und fachdaten sind derselbe Alias, in der Adresse, in den Regeln der Aufrufer und beim Prüfen auf Doppel. Zwei Einträge, die sich nur darin unterscheiden, verhindern den Start |
| Reservierte Namen | keine. * in den Regeln der Aufrufer meint jeden Alias; als Name ist * nach der Zeichenregel ohnehin unzulässig |
Ein Verstoß verhindert den Start mit der Meldung „'<Name>' ist kein zulaessiger Aliasname“. Über
die Verwaltungsschnittstelle (Menge DataSources) wird der Eintrag nicht übernommen: Antwort 422
mit derselben Meldung; der Speicher bleibt unverändert.
Quelle der Regel im Code: GatewayIdentifier.IsValidPart im Vertragspaket
Wkl.Data.Gateway.Contracts; eine Anwendung, die das Paket bezieht, kann vor dem Speichern genau
diese Methode aufrufen.
Gateway:Security
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
AuthMode | ApiKey | Anmeldeverfahren, durch Komma getrennt: ApiKey, Windows, SqlLogin, PersonalKey; None nur in der Umgebung Development. ApiKey verlangt mindestens einen Eintrag unter ApiKeys, PersonalKey einen Verwaltungsspeicher; ohne Speicher verlangen Windows und SqlLogin mindestens eine Zuordnung. Sonst startet der Dienst nicht |
ApiKeyHeader | X-Api-Key | Kopfzeile für Dienstschlüssel und persönliche Schlüssel – eine Kopfzeile, weil eine Abfragezeichenfolge in Zugriffsprotokollen, Browserverläufen und Verweisen landet |
CorrelationHeader | X-Request-Id | Kopfzeile mit der Korrelationskennung, unter der Protokoll und Fehlerantwort zusammengehören |
ApiKeys | leer | Dienstschlüssel: Client (Aufrufer) und Key (Verweis). Einträge ohne ApiKey in AuthMode verhindern den Start |
Clients | leer | Regeln: Id, Databases, Resources (tables, views, functions, procedures, sql, admin; * ohne sql und admin), Objects und ExceptObjects (*, schema.*, schema.name; leer = alle Objekte der Arten; nicht neben sql), Verbs, ReadOnly; siehe Rechte |
WindowsAccounts | leer | Account (Name oder SID) und Client; siehe Windows-Anmeldung |
SqlLogins | leer | Login (Name oder *) und Client |
RateLimit:PerCaller | 300 | Anfragen je Aufrufer und Zeitraum; 0 schaltet die Grenze ab. Folgeseiten, die der Dienst ausgegeben hat, zählen nicht |
RateLimit:WindowSeconds | 60 | Länge des Zeitraums in Sekunden |
TrustedProxies | leer | Adressen vorgeschalteter Proxys, deren X-Forwarded-For, X-Forwarded-Proto und X-Forwarded-Host der Dienst glaubt; siehe Hinter IIS oder einem Proxy |
SignInRules | leer | Anmelderichtlinie. Ohne Verwaltungsspeicher gilt sie, wie sie hier steht, und kennt nur Deny. Mit Verwaltungsspeicher ist sie nur der Startwert beim Anlegen des Speichers (auch RequireTotp); danach gelten allein die Regeln im Speicher. Regeln nennen Netze, Personen, Windows-Gruppen, Länder (Countries, ExceptCountries) und befristete Ausnahmen (Exceptions); Mode = Report erprobt eine Regel, statt sie durchzusetzen. Siehe Anmeldung |
TotpSessionHours | 10 | Laufzeit einer Sitzung des zweiten Faktors in Stunden, 1 bis 168; die Einstellung totp_session_hours im Speicher geht vor |
TotpEnrolHours | 24 | Frist, in der eine Person den zweiten Faktor bei der ersten Anmeldung selbst einrichten darf, 0 bis 168; 0 schaltet das ab; totp_enrol_hours im Speicher geht vor |
Gateway:Limits
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
DefaultTop | 1000 | Fenstergröße, wenn der Aufrufer keine nennt |
MaxTop | 10000 | Größtes Fenster; eine größere Angabe wird auf diesen Wert begrenzt. Gruppen nach $apply kommen ohne Angabe in Fenstern dieser Größe |
MaxRows | 100000 | Größte Zeilenzahl einer Antwort, gleich woher. Auf der eigenen Route und bei eigenen Anweisungen trägt eine gekürzte Antwort truncated. Ein Fenster (DefaultTop, MaxTop, $top) ist nie größer als MaxRows, auch je Objekt: Eine Seite wird deshalb nie an dieser Grenze gekürzt, und über OData geht das Lesen mit @odata.nextLink weiter. |
MaxBodyBytes | 1048576 | Größter Rumpf einer Anfrage; darüber 429 |
QueryTimeoutSeconds | 30 | Zeitgrenze einer Anweisung; darüber 504 (TIMEOUT) |
Objects | leer | Abweichende Grenzen je Objekt: Match (Platzhaltermuster gegen <alias>/<art>/<objekt>, etwa fachdaten/views/container_*, für eigene Anweisungen <alias>/sql/) und beliebige von DefaultTop, MaxTop, MaxRows, QueryTimeoutSeconds (nicht MaxBodyBytes) |
Ressourcengrenzen über Gateway:Limits, verfeinerbar je Objekt. Eine Regel wird gegen
<alias>/<art>/<objekt> geprüft; die erste passende gewinnt, in der konfigurierten
Reihenfolge.
Gateway:Providers
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
Path | leer | Ordner für Provider, die der Betreiber selbst installiert, absolut oder relativ zum Inhaltsstamm; leer: nur die mitgelieferten |
Der Dienst sucht beim Start in zwei Ordnern, jeweils mit dem Aufbau <Ordner>/<Kennung>/<Fassung>/
und einer Datei provider.json darin: im Ordner providers neben dem Programm (mitgelieferte
Provider; eine Aktualisierung ersetzt ihn) und unter Path (gehört dem Betreiber und bleibt bei
einer Aktualisierung stehen). Ein Paket wird nur geladen, wenn Ordnername und Kennung übereinstimmen,
die Fassung des Provider-Vertrags passt, die Plattform passt und jede Datei ihre Prüfsumme
(SHA-256) trifft. Ein Paket des Betreibers darf weder die Kennung noch einen Zweitnamen eines
mitgelieferten Providers belegen.
Ein Provider läuft im Dienst mit dessen Rechten. Schreiben dürfen in beide Ordner nur Konten, die auch den Dienst selbst ändern dürfen; über das Netz lässt sich kein Paket ablegen.
Gateway:Store
{
"Gateway": {
"Store": {
"Path": "store/gateway.db",
"MasterKey": "env:WKL_GW_MASTER_KEY",
"PollSeconds": 5
}
}
}
| Einstellung | Bedeutung |
|---|---|
Path | Pfad der Datei; relativ zum Inhaltsstamm. Leer: kein Speicher, alles aus der Konfigurationsdatei |
LogPath | Pfad der Protokolldatei mit Anmelde- und Lastprotokoll; relativ zum Inhaltsstamm. Leer (Vorgabe): neben dem Speicher mit angehängtem -logs, also store/gateway-logs.db zu store/gateway.db |
LogMaxMegabytes | Größe, in der die Protokolldatei gehalten wird, in MB (64–65 536), Vorgabe 4 096. Darüber entfernt der Dienst die ältesten Einträge |
MasterKey | Verweis (env: oder file:) auf den Hauptschlüssel, mindestens 32 Bytes. Pflicht mit Path |
MaxKeyLifetimeDays | Höchstlaufzeit eines persönlichen Schlüssels in Tagen, Vorgabe 365; 0 erlaubt Schlüssel ohne Ablauf |
MaxActivationHours | Höchstdauer einer Freischaltung eines Schlüssels auf Abruf in Stunden (1–168), Vorgabe 12; die Einstellung max_activation_hours im Speicher geht vor |
SelfServiceKeyDays | Laufzeit eines in der Selbstbedienung ausgestellten Schlüssels in Tagen (0–3650), Vorgabe 0 = Selbstbedienung aus; die Einstellung self_service_key_days im Speicher geht vor |
MasterKeyId | Kennung des Hauptschlüssels, Vorgabe 1; 1 bis 64 Zeichen aus Buchstaben, Ziffern, ., -, _, Groß-/Kleinschreibung zählt. Steht im Klartext in jedem versiegelten Wert |
RetiredKeys | Abgelöste Hauptschlüssel während eines Schlüsselwechsels, je Eintrag Id und Key (Verweis); sie öffnen nur, mit ihnen wird nichts versiegelt |
PollSeconds | Abstand der Prüfung auf Änderungen in Sekunden, Vorgabe 5; 0 schaltet sie ab |
RequireAdminTotp | Feste Untergrenze, Vorgabe true: Die Verwaltung verlangt immer einen zweiten Faktor, auch wenn die Regel im Speicher gelöscht wurde; nur hier abschaltbar, siehe Erster Administrator und Rettung |
PickupMinutes | Gültigkeit eines Einmal-Links in Minuten, Vorgabe 15 (1 bis 1440) |
MailLinkHours | Gültigkeit eines Einmal-Links per Mail in Stunden, Vorgabe 72 (1 bis 720); die Einstellung mail_link_hours im Speicher geht vor |
TotpIssuer | Name, unter dem eine Authenticator-App den zweiten Faktor führt, Vorgabe Wkl.Data.Gateway; je Installation unterscheidbar wählen. Das Installationspaket setzt ihn aus dem Namen der Installation (GW_INSTALLATION_NAME). 1 bis 64 Zeichen, ohne Leerzeichen am Rand, Doppelpunkt (Trenner in der Adresse für die App), Anführungszeichen und Steuerzeichen; die Einstellung installation_name im Speicher geht vor. Ein neuer Name gilt nur für danach eingerichtete Faktoren |
SetupKey und EmergencyAccess gibt es nicht mehr. Der Einrichtungsschlüssel galt über HTTPS von
jedem Rechner aus und wurde von selbst wieder gültig, sobald kein Administrator mehr anmelden
konnte – dann ohne zweiten Faktor. Den ersten Administrator legt jetzt der Befehl init-admin am
Server an. Eine Konfiguration, die die Werte noch nennt, startet weiter; der Dienst meldet beim
Start, dass er sie nicht beachtet.
Gateway:SignInLog
Das Anmeldeprotokoll in der Protokolldatei neben dem Verwaltungsspeicher, die Anmelderegeln und die Meldung ihrer Befunde; ohne Speicher zeichnet der Dienst nichts auf.
"Gateway": {
"SignInLog": {
"TimeZone": "Europe/Berlin",
"Networks": [ { "Name": "Werk 3", "Network": "10.3.0.0/16" } ],
"GeoIp": { "StaleDays": 60 },
"Alerts": { "Recipients": [ "sicherheit@example.com" ], "DigestHour": 7 }
}
}
| Einstellung | Vorgabe | Bedeutung |
|---|---|---|
Enabled | true | Anmeldungen aufzeichnen |
SuccessWindowMinutes | 15 | Eine erfolgreiche Anmeldung erscheint einmal je so viele Minuten, Person, Verfahren und Herkunft (1–1440) |
EventDays | 90 | Wie viele Tage SignInOrigins und SignInEvents ohne eigene Zeitangabe zurücklesen (1–3650). Löscht nichts: Die Einzelereignisse bleiben, bis die Protokolldatei ihre Größe erreicht (Gateway:Store:LogMaxMegabytes) |
HourDays | 400 | Aufbewahrung der Stundenwerte in Tagen (1–3650) |
TimeZone | Zeitzone des Servers | Kennung einer Zeitzone (Windows- oder IANA-Name) für Weekday und HourOfDay, für die Tage und Stunden der Befunde und der Profile, für die Zeitfenster der Anmelderichtlinie sowie für die Uhrzeit in Meldungen; gespeichert wird in UTC |
Alerts:Recipients | leer | Mail-Adressen, an die der Dienst Befunde meldet. Leer: keine Mail, Befunde nur im Dienstprotokoll und in SignInFindings. Verlangt einen Mailversand |
Alerts:Digest | true | Befunde der Stufe ask einmal am Tag gesammelt melden; false schaltet das ab |
Alerts:DigestHour | 7 | Ab welcher Stunde (0–23, TimeZone) die tägliche Sammlung verschickt wird |
Networks | leer | Eigene Netze mit Name (1–64 Zeichen) und Network (Adresse oder Netz in CIDR-Form); das erste passende benennt die Herkunft. Eine Anfrage aus einem eigenen Netz hat für Regeln nach Land kein Land und keinen Netzbetreiber. In From und ExceptFrom einer Anmelderegel steht ein Name für alle unter ihm geführten Netze |
GeoIp:Folder | Ordner geoip neben der Speicherdatei | Ordner der Geodatenbank, relativ zum Inhaltsstamm |
GeoIp:MaxMegabytes | 256 | Größte Datei der Geodatenbank in MB, beim Hochladen und entpackt (1–2048) |
GeoIp:StaleDays | 60 | Ab diesem Alter in Tagen gilt eine Datei als veraltet (GeoIpFiles.Stale) (1–365) |
Die Quelle der Geodatenbank steht nicht hier, sondern im Speicher (set-geoip-source), weil ein
Lizenzschlüssel dazugehören kann und die Verwaltung sie ändern soll.
Meldung der Befunde. Jeder Befund steht im Dienstprotokoll – act als Warnung, ask als
Information – mit Regel, Zeit und Person. Mit Alerts:Recipients schickt der Dienst zusätzlich jeden
Befund der Stufe act sofort als Mail und die Befunde der Stufe ask einmal am Tag gesammelt. Eine
Mail nennt Regel, Zeitpunkt, Person und Nummer des Befunds, nie Adresse, Land oder Schlüssel;
diese stehen nur in der Verwaltungsschnittstelle für Berechtigte. Eine Sammlung, die niemand
annahm, holt der Dienst am nächsten Tag nach.
Gateway:Mail
Mailversand für die Meldung der Befunde. Ohne Eintrag verschickt der Dienst keine Mail.
"Gateway": {
"Mail": {
"Transport": "smtp",
"Host": "mail.example.com",
"Port": 587,
"Encryption": "starttls",
"Username": "gateway@example.com",
"FromAddress": "gateway@example.com",
"FromName": "Datengateway",
"PublicBaseUrl": "https://gateway.example.com"
}
}
| Einstellung | Vorgabe | Bedeutung |
|---|---|---|
Transport | none | none (kein Versand), smtp oder file (jede Mail als Datei in MailboxDirectory, zum Testen) |
Host, Port | –, 587 | Mailserver für smtp |
Encryption | starttls | starttls, tls oder none |
VerifyPeer | true | Zertifikat des Mailservers prüfen |
Username | leer | Anmeldename am Mailserver |
Password | – | Kennwort am Mailserver. Nicht in die Datei schreiben, sondern als Umgebungsvariable Gateway__Mail__Password des Dienstes setzen |
TimeoutSeconds | 10 | Wartezeit auf den Mailserver |
FromAddress, FromName | leer | Absender; FromAddress ist Pflicht |
PublicBaseUrl | leer | Öffentliche Adresse des Dienstes (https://…); Pflicht für jeden Versand |
MailboxDirectory | leer | Ordner für file, relativ zum Inhaltsstamm |
Strict | true | Lehnt unsichere Einstellungen ab: file, unverschlüsselte Verbindung, ungeprüftes Zertifikat, unverschlüsselte öffentliche Adresse. Nur für Tests abschalten |
Eine Einstellung, mit der kein Versand möglich ist, verhindert den Start mit dem Grund; ebenso
Alerts:Recipients ohne Transport. none ohne Empfänger ist der gewöhnliche Zustand.
Gateway:LoadLog
Das Lastprotokoll in der Protokolldatei neben dem Verwaltungsspeicher; ohne Speicher zeichnet der Dienst nichts auf.
"Gateway": {
"LoadLog": { "PersonDays": 3, "SlowMilliseconds": 2000 }
}
| Einstellung | Vorgabe | Bedeutung |
|---|---|---|
Enabled | true | Last je Form aufzeichnen; ausgeschaltet kostet es eine Prüfung je Anfrage |
HourDays | 400 | Aufbewahrung der Stundenwerte je Form in Tagen (1–3650); zugleich die Obergrenze für export-load |
PersonDays | 7 | Aufbewahrung der Tageszahlen je Person in Tagen (1–90) |
SlowDays | 7 | Aufbewahrung der langsamen Einzelanfragen in Tagen (1–90) |
SlowMilliseconds | 1000 | Ab dieser Dauer in Millisekunden wird eine Anfrage einzeln festgehalten (10–600000) |
Anfragen an /health zeichnet der Dienst nicht auf. In einer Minute hält er höchstens 5 000
verschiedene Formen und 2 000 langsame Anfragen fest; was darüber hinausgeht, zählt er nicht mit
und meldet es im Protokoll des Dienstes.
Gateway:Certificate
"Gateway": {
"Certificate": { "Subject": "daten.example.local", "StoreLocation": "LocalMachine", "StoreName": "My" }
}
"Gateway": {
"Certificate": { "File": "zertifikat/gateway.pfx", "Password": "env:WKL_GW_CERT_PASSWORD" }
}
| Einstellung | Bedeutung |
|---|---|
Subject | Name, auf den das Zertifikat ausgestellt ist (gemeiner Name oder DNS-Name), im Zertifikatspeicher von Windows; nur unter Windows |
StoreLocation, StoreName | Ort im Zertifikatspeicher, Vorgabe LocalMachine und My; StoreLocation ist LocalMachine oder CurrentUser |
File | Zertifikatsdatei (PFX, oder PEM mit dem Schlüssel in KeyFile bzw. derselben Datei), auf jeder Plattform; relativ zum Inhaltsstamm |
KeyFile | Datei mit dem privaten Schlüssel zu einer PEM-Datei in File; leer, wenn er in derselben Datei steht |
Password | Verweis (env: oder file:) auf das Kennwort einer PFX-Datei |
WarnDays | Ab wie vielen Tagen vor dem Ablauf der Dienststatus warnt, 1 bis 365, Vorgabe 14 (unter 3 Tagen: bad) |
Wirkung und Wechsel ohne Neustart: HTTPS und Zertifikat.
Gateway:Downloads
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
Path | downloads | Ordner der Installationspakete für /download/, relativ zum Inhaltsstamm; leer schaltet das Herunterladen ab |
Gateway:SchemaState
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
Anonymous | false | true: Schemastand auch ohne Anmeldung. Produkt, Schemafassung und Fassungsbereich verraten den Patchstand einer Anwendung; nur einschalten, wenn jeder Rechner, der den Dienst erreicht, ihn kennen darf |
Kestrel
Lauschadressen und ein festes Zertifikat nach den Regeln von ASP.NET Core (Kestrel:Endpoints); siehe
HTTPS und Zertifikat. Ohne den
Abschnitt gilt --urls.
Bemerkungen
- Die Startprüfung weist widersprüchliche Angaben ab, statt eine davon zu wählen: doppelte Schlüssel, zwei Regeln eines Aufrufers für denselben Alias,
sqlan einer nur lesenden Regel, ein Netz mit gesetzten Host-Bits,RequireTotpfür Dienstschlüssel, unbekannte Windows-Konten. SqlLogininAuthModeverlangt mindestens eine Datenquelle mitAllowSqlLoginsund mindestens einen Eintrag unterSqlLogins. Ohne Verwaltungsspeicher verhindert eine fehlende Angabe den Start. Mit Verwaltungsspeicher startet der Dienst und meldet die Lücke im Protokoll, weil Schalter und Zuordnungen dort erst nach dem Verfahren gesetzt werden können; bis dahin endet eine SQL-Anmeldung mit401. Umgekehrt weisen Startprüfung und VerwaltungAllowSqlLoginsund Zuordnungen ohne das Verfahren ab. Reihenfolge: SQL-Anmeldung einrichten.- Eine geänderte Konfigurationsdatei wirkt erst nach einem Neustart; Änderungen im Verwaltungsspeicher wirken sofort.
Beispiel
Ein Alias mit eigenen Anweisungen und ein Aufrufer, der sie nutzen darf:
{
"Gateway": {
"Databases": [
{ "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…",
"AllowPassThrough": true }
],
"Security": {
"Clients": [
{ "Id": "auswertung", "Databases": [ "fachdaten" ],
"Resources": [ "views", "sql" ], "Verbs": [ "GET", "POST" ], "ReadOnly": false }
]
}
}
}