Konfiguration

Dieses Dokument beschreibt die spezifischen Einstellungen für RestFrontage und die initialisierten GraphicStream-Bibliotheken.

Standard ASP.NET Kernthemen, wie zum Beispiel Logging, AllowedHosts oder die Wahl der Hosting-Umgebung sind nicht detailliert. Sie sind die Appanage des zugrundeliegenden Systems zu ASP.Net und IIS.

1. Überblick

Abschnitt Status Rolle
Database Erforderlich Wählt SQL Server LocalDB, SQLite oder entfernten SQL Server und benennt die lokalen Geschäfts- und Sicherheitsdatenbanken.
ConnectionStrings Erforderlich im entfernten SQL-Server-Modus Konfiguriert Business-, Sicherheits-, Server- und Lizenzgrundlagen.
LogsSettings Erforderlich Konfigurieren Sie den GraphicStream-Logger und das Log-Ziel.
IOSettings In der Praxis vorgeschrieben Konfiguriert Medien- und Dateispeicherung.
Application Erforderlich Konfiguriert Serveridentität, Token, leere Passwörter, Aufwärmen und Aufgabenschleife.
Application:OpenAI Bedingt Konfiguriert AI-Funktionen mit Azure OpenAI Assistants.
Environment Optional Zeigt ein Banner, um die Umgebung visuell zu kennzeichnen.
SecurityDomainSynchronization Optional Reguliert die Synchronisation der Sicherheitsdomäne zwischen Instanzen.
Recovery Empfohlen Schützt die Wiederherstellungskonsole unabhängig von der Sicherheitsbasis.
ApiKey Bedingt Deklariert API-Schlüssel, die mit Immersiv-Nutzern zugeordnet sind.
Saml Bedingt Konfiguriert die SAML-Authentifizierung mit FID.
OpenID Bedingt Konfiguriert die OpenID-Tokenvalidierung mit dem FID.
Session Optional Aktiviert die Serversitzung nur, wenn der Abschnitt mindestens einen Parameter enthält. Ein fehlender oder leerer Abschnitt hält den sitzungslosen Betrieb aufrecht.
IPX Inaktiv Der Abschnitt IPX:Export der bereitgestellten Datei wird von keiner Komponente gelesen.

2. Auswahl des Datenbankmodus

RestFrontage setzt diese Priorität durch:

  1. Database:EnableLocalDB = true wählt SQL Server LocalDB aus;
  2. ansonsten gilt: Database:EnableSqlite = true wählt SQLite aus;
  3. ansonsten verwendet RestFrontage die SQL-Server-Strings von ConnectionStrings.

2.1 Remote SQL Server oder SQL Server Express

Empfohlene Mindestanforderungen für einen vollständigen Einsatz:

{
  "Database": {
    "EnableLocalDB": false,
    "EnableSqlite": false
  },
  "ConnectionStrings": {
    "ImmersiveModelContainer": "<chaine SQL de la base metier>",
    "SecurityModelContainer": "<chaine SQL de la base de securite>",
    "ServerDatabaseContext": "<chaine SQL des donnees serveur>",
    "LicenseModelContainer": "<chaine SQL des licences>"
  }
}

Legende Erforderlich Nutzung und Fall
ImmersiveModelContainer Ja Immersive Geschäftsdaten. Dient auch als Rückfalloption für ServerDatabaseContext.
SecurityModelContainer Ja Benutzer-, Gruppen-, Rechte- und Sicherheitsdomänen. Dient außerdem als Notfallplan für LicenseModelContainer.
ServerDatabaseContext Nein Serveraufgaben und interne KI-Daten. IPX-Verlauf und Arbeitssitzungen nutzen ebenfalls diese Verbindung. Ohne Wert oder, wenn nicht angegeben, wird die Geschäftsbasis genutzt.
LicenseModelContainer Nein Installierte Lizenzen. Ohne Wert oder, wenn nicht angegeben, wird die Sicherheitsbasis verwendet.

Im SQL-Server-Modus ermöglicht der Zugriff auf Geschäfts-, Sicherheits-, Server-, Lizenz- und IPX-Historie bis zu fünf Wiederholungen bei vorübergehenden SQL-Fehlern, mit einer maximalen Verzögerung von zehn Sekunden zwischen den Wiederholungen.

Die Protokolldatenbank ist nicht konfiguriert in ConnectionStrings. Es verwendet ausschließlich LogsSettings:ConnectionString.

2.2 SQLite

{
  "Database": {
    "EnableLocalDB": false,
    "EnableSqlite": true,
    "ImmersiveSqlite": "Immersive.sqlite",
    "ImmersiveSecuritySqlite": "ImmersiveSecurity.sqlite"
  },
  "LogsSettings": {
    "ConnectionString": "ImmersiveLogs.sqlite"
  }
}

Legende Rolle
ImmersiveSqlite Geschäftsdatenbank und Speicherung der IPX-Geschichte.
ImmersiveSecuritySqlite Sicherheitsbasis.

LogsSettings:ConnectionString enthält hier den Namen oder den relativen Pfad der SQLite-Logdatei. Sowohl der Logger als auch der Nachschlagekontext verwenden dieselbe Datei.

Die SQLite-Pfade werden relativ zum Ordner aufgelöst, der die RestFrontage-Ausführbare Datei enthält, und die Dateien müssen bereits existieren. Der aktuelle Code erzeugt die fehlenden SQLite-Dateien nicht.

2.3 SQL Server LocalDB

{
  "Database": {
    "EnableLocalDB": true,
    "EnableSqlite": false,
    "ImmersiveDatabaseName": "Immersive",
    "ImmersiveSecurityDatabaseName": "ImmersiveSecurity",
    "ImmersiveBacPacName": "Immersive.bacpac",
    "ImmersiveSecurityBacPacName": "ImmersiveSecurity.bacpac",
    "ImmersiveLogBacPacName": "ImmersiveLogs.bacpac"
  },
  "LogsSettings": {
    "ConnectionString": "ImmersiveLogs"
  }
}

Legende Erforderlich Rolle
ImmersiveDatabaseName Ja Dateiname <nom>.mdf und die Geschäftsbasis.
ImmersiveSecurityDatabaseName Ja Der Name der Datei und die Sicherheitsdatenbank.
ImmersiveBacPacName Nein BACPAC ist der Anfang der Geschäftsbasis.
ImmersiveSecurityBacPacName Nein BACPAC der Sicherheitsbasis.
ImmersiveLogBacPacName Nein BACPAC-Datenbank der Zeitungen, deren Name von LogsSettings:ConnectionString.

LogsSettings:ConnectionString enthält den logischen Namen der LocalDB-Logdatenbank hier, ohne Erweiterung .mdf nicht ein vollständiger SQL-String. Im Beispiel öffnet oder erstellt RestFrontage ImmersiveLogs.mdf, und dann verwenden der Logger und der Lookup-Kontext die tatsächlich abgerufene LocalDB-Zeichenkette wieder.

MDF-Dateien werden in den Unterordner gelegt Data befindet sich neben den Assemblies. Beim Erstellen einer Datenbank wird ein BACPAC unter der Leitung durchsucht Assets/Bacpac.

Dieser Modus erfordert SQL Server LocalDB auf der Maschine. Wie im SQLite-Modus wird der aktuelle Code nicht gespeichert ServerDatabaseContext Noch LicenseSecurityModel.

2.4 Ein einzelnes Ziel für Logs

Das Ziel der Logs wird immer definiert durch LogsSettings:ConnectionString. RestFrontage interpretiert seinen Wert automatisch entsprechend dem unter der Wahl gewählten Modus Database :

Mode Erwartungswert in LogsSettings:ConnectionString Resolution abgeschlossen
Remote SQL Server Der vollständige SQL-Server-Verbindungsstring. Die Schnur wird so verwendet, wie sie ist.
SQL Server LocalDB Logischer Name der Datenbank, zum Beispiel ImmersiveLogs. RestFrontage öffnet oder erstellt die Datei <nom>.mdf, und konstruiert dann die LocalDB-Zeichenkette.
SQLite Zum Beispiel der relative Name oder Pfad der Datei ImmersiveLogs.sqlite. RestFrontage prüft die Datei neben der ausführbaren Datei und baut die SQLite-Verbindung auf.

Diese Auflösung ist bei beiden Anwendungen gemeinsam: dem Batch-Logger, der die Nachrichten schreibt, und dem Kontext LogsContext wer sie konsultiert. Sie können daher nicht mehr unfreiwillig auf zwei verschiedene Stützpunkte verweisen.

3. GraphicStream-Protokolle – LogsSettings

Der GraphicStream-Logger schreibt die Protokolle im Hintergrund, sodass für jede Nachricht keine Verbindung entsteht. Wenn eine Nachricht erzeugt wird, wird sie in eine Warteschlange im Speicher gelegt. In regelmäßigen Abständen nimmt der Logger eine Gruppe von Nachrichten aus dieser Warteschlange auf und fügt sie in die ausgewählte Datenbank ein.

Die Einstellungen in diesem Abschnitt definieren vier Elemente: das Ziel, die Identifikation des Herstellertools, die Kapazität der Warteschlange und wie Nachrichten gruppiert und dann gespeichert werden.

{
  "LogsSettings": {
    "ProviderIdentifier": 10,
    "IncludeScopes": true,
    "IsEnabled": true,
    "ContainerName": "Log",
    "ConnectionString": "<chaine SQL de la base des journaux>",
    "FlushPeriod": "00:00:01",
    "BackgroundQueueSize": 1000,
    "BatchSize": null,
    "TableSizeLimit": 10240
  }
}

Legende Default Tipps zum realen Effekt und Parametrisierung
ConnectionString Keine Das eindeutige Ziel des Loggers und des Konsultationskontexts. Im entfernten SQL Server füllen Sie eine vollständige SQL-Zeichenkette aus; in LocalDB den logischen Namen der Datenbank; in SQLite den relativen Namen oder Pfad der Datei. Der Wert ist unabhängig vom Abschnitt ConnectionStrings.
ContainerName Log Der Name der Tabelle, die die Logs empfängt. Der empfohlene Wert ist Log, was dem von GraphicStream bereitgestellten Schema entspricht.
ProviderIdentifier 0 So kannst du zwischen den verschiedenen Werkzeugen unterscheiden, die in das Injizieren einfließen Log, um dieselbe Logdatenbank über mehrere GraphicStream-Tools wie mehrere RestFrontage und/oder Hubs zu teilen.
IncludeScopes true Ermöglicht das Auslesen strukturierter Informationen, die in den Logging-Scopes platziert sind. Der Logger erkennt insbesondere Channel, der die Nachricht in einen Kanal klassifiziert, und Data, was zusätzliche Daten hinzufügt. Ohne bereitgestellten Kanal wird die Nachricht im Kanal gespeichert Generic.
IsEnabled true Aktiviert den GraphicStream-Log-Provider. À falsewird seine Verarbeitungsschlange gestoppt und neue Nachrichten werden von diesem Anbieter nicht protokolliert. Diese Einstellung deaktiviert nicht notwendigerweise andere Log-Ziele, die konfiguriert werden können.
FlushPeriod 00:00:01 Die Wartezeit zwischen zwei Schreibzyklen. Mit einer Sekunde werden etwa jede Sekunde ausstehende Nachrichten an die Datenbank gesendet. Ein kürzerer Wert verringert die Zeit, die in der Datenbank erscheint, erhöht aber die Trefferfrequenz; ein längerer Wert gruppiert mehr Schreibvorgänge, verzögert aber deren Sichtbarkeit. Die Dauer muss streng positiv sein.
BackgroundQueueSize 1000 Die maximale Anzahl von Nachrichten, die im Speicher warten können, bevor sie verarbeitet werden. Wenn die begrenzte Warteschlange voll ist, wartet der Produzent darauf, dass ein Platz frei wird, sodass ein zu niedriger Wert Anfragen während eines Zustroms von Logs verlangsamen kann. null Erstellt eine unbegrenzte Warteschlange, allerdings auf Kosten eines möglicherweise höheren Speicherverbrauchs. Verwenden Sie einen streng positiven Wert. 0 wird von der Optionsklasse akzeptiert, erlaubt aber nicht, dass die Warteschlange zur Laufzeit erstellt wird.
BatchSize null Die maximale Anzahl der Nachrichten, die aus der Warteschlange entfernt und in einem Zyklus eingefügt werden. null verarbeitet alle verfügbaren Nachrichten. Ein positiver Wert begrenzt die Größe jeder Charge; wenn die Warteschlange mehr Nachrichten enthält, wartet der Rest auf weitere Zyklen. Ein zu niedriger Wert kann eine Verzögerung verursachen, wenn viele Logs erstellt werden.
TableSizeLimit 10240 Die maximale Anzahl der Zeilen, die aufbewahrt werden. Nachdem eine Charge geschrieben wurde, löscht der Logger die ältesten Einträge entsprechend ihrem Datum, um unter diese Grenze zu fallen. null deaktiviert diese automatische Säuberung. Ein eingegebener Wert muss streng positiv sein.

Beispiel, wie man mit den oben genannten Werten arbeitet: Bis zu 1.000 Nachrichten können in der Warteschlange warten; ungefähr jede Sekunde werden alle verfügbaren Nachrichten in Chargen geschrieben, da BatchSize ist es wert null ; Nach dem Schreiben werden die ältesten Logs gelöscht, wenn die Tabelle 10.240 Zeilen überschreitet.

Storage sollte für RestFrontage nicht manuell ausgewählt werden. Die Anwendung zwingt es dazu, SQL für entfernte SQL Server und LocalDB, oder SQLite wenn Database:EnableSqlite ist aktiviert. Jeder Wert Storage im JSON vorhanden ist, wird daher durch diese berechnete Wahl ersetzt.

FileSizeLimit, RetainedFileCountLimit, FileName und Extension existieren in der Optionsklasse, werden jedoch nicht von den von RestFrontage ausgewählten SQL Server- und SQLite-Anbietern genutzt.

Die unten aufgeführten Ebenen Logging und Logging:GraphicStreamLogs:LogLevel sind Teil der Standard-Log-Filterung und werden hier nicht detailliert beschrieben.

4. Dateispeicherung – IOSettings

{
  "IOSettings": {
    "Storage": "AzureBlob",
    "ConnectionString": "<secret ou chemin selon le mode>",
    "ContainerName": "immersivecontent"
  }
}

Storage ConnectionString ContainerName
AzureBlob Die Verbindungszeichenkette des Azure Storage-Kontos. Containername: Blob.
FileSystem Der Root-Ordner des Speichers. Unterordner zum Root hinzugefügt.
HostEnvironment Ignoriert. Ein Unterordner des RestFrontage-Root-Verzeichnisses.
SQL Die SQL-Server-Verbindungszeichenkette. Der Name der Tabelle, die den Pfad und den Binärinhalt enthält.

Eine Änderung erfordert, dass ein Neustart konsequent angewendet wird.

Vorteile HostEnvironment, alle Operationen verwenden dieselbe Wurzel: ContentRootPath, das heißt, das Root-Verzeichnis von RestFrontage. Existenztest, Lesen, Schreiben, Liste und Löschen zielen alle auf Ziele <ContentRootPath>/<ContainerName>/<chemin> ; ConnectionString wird in diesem Modus ignoriert.

5. Allgemeine RastFrontage-Einstellungen – Application

{
  "Application": {
    "Name": "RestFrontage PROD",
    "AllowBlankPassword": false,
    "PreWarmOrganizations": [ "Organisation A" ],
    "TokenLifetime": "08:00:00",
    "JWTSecurityKey": "<secret aleatoire d'au moins 32 octets>",
    "TaskManagerLoopIdleTime": 60
  }
}

Legende Default Reale Wirkung
Name null Name, der von der System-API zurückgegeben wird; sichtbarer Fallback: ImmersiveRest Server.
AllowBlankPassword false Erlaubt die Authentifizierung mit einem leeren Passwort und beeinflusst die Initialisierungsprüfung. Lass zu false in Produktion.
PreWarmOrganizations null Die Namen von Organisationen, deren Caches beim Start vorgeladen sind. Ein leeres Array behält das On-Demand-Laden bei.
TokenLifetime 08:00:00 Dauer der von RestFrontage ausgesendeten JWTs.
JWTSecurityKey Keine zuverlässigen Das HMAC-Geheimnis wird verwendet, um JWTs zu signieren und zu validieren. Es muss 256 Bits überschreiten, zwischen den Instanzen gleich bleiben und niemals committed werden. Eine Änderung macht bestehende Token ungültig.
TaskManagerLoopIdleTime 60 Pause in Sekunden zwischen zwei Durchgängen in der Server-Aufgabenschleife. Verwenden Sie einen streng positiven Wert.

Der Abschnitt Application Muss existieren: Die verknüpfte Anwendung wird dann während der Initialisierung als erforderlicher Dienst angefordert.

6. Azure OpenAI – Application:OpenAI

{
  "Application": {
    "OpenAI": {
      "Endpoint": "https://<ressource>.openai.azure.com",
      "ApiKey": "<secret>",
      "AssistantName": "asst_<identifiant>",
      "APIVersion": "2024-05-01-preview"
    }
  }
}

Legende Für KI verpflichtend Rolle
Endpoint Ja Die URL der Azure OpenAI-Ressource. Der letzte Schrägstrich wird vom Dienst entfernt.
ApiKey Ja Wert im Header gesendet api-key.
AssistantName Ja Trotz seines Namens muss dieser Wert zum Beispiel die technische Kennung des Zauberers sein asst_....
APIVersion Nein Azure OpenAI API version; default 2024-05-01-preview.

Das Fehlen dieses Unterabschnitts verhindert keinen Start; der Fehler wird beim ersten Aufruf einer KI-Funktion angezeigt, die diese Werte benötigt.

7. Visuelle Identifikation – Environment

{
  "Environment": {
    "Name": "PROD",
    "BackgroundColor": "#B00020",
    "ForegroundColor": "#FFFFFF",
    "Size": 6
  }
}

Legende Default Rolle
Name leer Text wird am Empfangstresen und in der Breadcrumb-Spur angezeigt. Ohne Namen ist das Willkommensabzeichen versteckt.
BackgroundColor #333 Die Hintergrund-CSS-Farbe des Environment Guides.
ForegroundColor white CSS-Farbe des Textes.
Size 7 Bootstrap-Klassensuffix fs-{Size} in Breadcrumbs. Verwenden Sie einen gültigen Bootstrap-Wert von 1 à 6.

Dieser Abschnitt beschreibt einen visuellen Hinweis von RestFrontage; er ist getrennt vom Namen der Hosting-Umgebung ASP.NET Core.

8. Sicherheitssynchronisation – SecurityDomainSynchronization

{
  "SecurityDomainSynchronization": {
    "VersionCheckInterval": "00:00:01"
  }
}

VersionCheckInterval ist das Intervall zwischen zwei Lesevorgängen der verteilten Version der Sicherheitsdomäne. Wenn eine andere Instanz eine neue Version veröffentlicht, lädt RestFrontage seine lokale Domäne neu.

Der Standardwert beträgt eine Sekunde. Eine Null- oder negative Dauer wird durch eine Sekunde ersetzt.

Alle Instanzen, die sich die gleichen Datenbanken teilen, müssen ein konsistentes Intervall verwenden. Ein sehr kurzer Wert verringert die Propagationsverzögerung, erhöht aber die verteilten Cache-Treffer.

9. Wiederherstellungskonsole – Recovery

{
  "Recovery": {
    "AccessKey": "<secret long et aleatoire>"
  }
}

AccessKey schützt die Seite /Setup/Tools, so konzipiert, dass sie auch dann zugänglich bleibt, wenn die Sicherheitsbasis ausfällt. Ohne Schlüssel kann die Konsole nicht entsperrt werden. Nach der Validierung wird der Zugriff in einem signierten Cookie für 30 Minuten aufbewahrt.

Die dedizierte Umgebungsvariable IMMERSIVE_RECOVERY_KEY hat Vorrang vor Recovery:AccessKey und muss in der Produktion Priorität haben.

Fall von Wiederherstellungsüberlastungen

A Wiederherstellungskosten ist ein Fallback-Konfigurationswert, der den normalen Wert vorübergehend mit demselben Namen ersetzt. Er wird verwendet, um einen Server mit falsch konfigurierter Verbindung, Protokollen oder Speicher zu reparieren, ohne die Datei direkt zu ändern appsettings.json Original.

Die Mischpult /Setup/Tools Speichert diese Werte in der optionalen Datei appsettings.Recovery.json, im Root-Verzeichnis von RestFrontage platziert. Zum Beispiel, wenn diese Datei einen neuen Wert für enthält ConnectionStrings:ImmersiveModelContainer, ersetzt dieser Wert den Wert von appsettings.json beim nächsten Boot. Andere Schlüssel, die nicht in der Wiederherstellungsdatei sind, kommen weiterhin aus der normalen Konfiguration.

Die Konsole kann die folgenden Abschnitte erstellen oder vervollständigen:

  • Die vier anerkannten Ketten von ConnectionStrings ;
  • LogsSettings ;
  • IOSettings.

Die Wiederherstellungsdatei fungiert daher als teilweise überlagerte Schicht über die bestehende Konfiguration:

  1. appsettings.json und andere übliche Konfigurationsdateien liefern Normalwerte;
  2. appsettings.Recovery.json Ersetzt nur die Schlüssel, die es enthält.
  3. Umgebungsvariablen und Startargumente haben weiterhin Vorrang gegenüber beiden Dateien.

Beispiel:

{
  "ConnectionStrings": {
    "ImmersiveModelContainer": "<chaine SQL de remplacement>"
  },
  "IOSettings": {
    "Storage": "FileSystem",
    "ConnectionString": "D:\\ImmersiveData",
    "ContainerName": "Content"
  }
}

In diesem Beispiel sind nur die Geschäftsbasis und die IOSettings sind überlastet. Die Sicherheitsbasis, Lizenzen, Protokolle und alle anderen Einstellungen behalten ihre normalen Werte bei.

10. API-Schlüssel-Authentifizierung – ApiKey

{
  "ApiKey": [
    {
      "App": "Forge",
      "Key": "<secret>",
      "User": "AN=ServiceForge, OU=Users, DC=Immersive, DC=GraphicStream, DC=fr",
      "From": "2026-01-01T00:00:00Z",
      "To": "2027-01-01T00:00:00Z"
    }
  ]
}

Legende Herrschaft
App Erwartungswert im Header x-app-name. Der Vergleich ignoriert den Fall. Ein leerer Wert deaktiviert die Eingabe.
Key Erwartungswert in x-api-key. Der Vergleich ist groß- und kleinschreibungssensitiv. Ein leerer Wert deaktiviert die Eingabe.
User Der genaue Erkennungsname eines bestehenden Benutzers in der Sicherheitsdatenbank. Dieser Benutzer wird zur Identität der Abfrage.
From Der Beginn der Gültigkeit ist eingeschlossen.
To Zweck von der Gültigkeit ausgeschlossen.

Verwenden Sie ISO 8601-Daten mit Zeitzone, idealerweise in UTC mit dem Suffix Z. Die Dauer der internen JWT, die für die Anfrage erstellt wurde, ist auf die verbleibende Zeit davor begrenzt To.

11. SAML - Saml

{
  "Saml": {
    "FidUrl": "https://<fid>",
    "FidSsoPath": "/<chemin-sso>",
    "FidSloPath": "/<chemin-slo>",
    "EntityId": "<identifiant RestFrontage declare dans la FID>",
    "LoginUrl": "https://<restfrontage>/api/Saml/Login",
    "LogoutUrl": "https://<restfrontage>/api/Saml/Logout"
  }
}

Legende Rolle
FidUrl Die Basis-URL der Identitätsföderation.
FidSsoPath Pfad hinzugefügt FidUrl um die SAML-Verbindungsanfrage zu erstellen.
FidSloPath Pfad hinzugefügt FidUrl um die SAML-Abmeldungsanfrage zu erstellen.
EntityId Der Absender hat in SAML-Anfragen deklariert.
LoginUrl Absolute Verbindung Rücksendungs-URL, platziert in AssertionConsumerServiceURL.
LogoutUrl Absolute Abmeldungs-Rückgabe-URL.

12. OpenID – OpenID

{
  "OpenID": {
    "FidUrl": "https://<fid>/",
    "FidAppId": "<client-id>",
    "FidAppSecret": "<secret>"
  }
}

Legende Reale Wirkung
FidUrl Basis-URL, die zum Aufrufen relativer Pfade verwendet wird tokeninfo und userinfo. Behalten Sie einen letzten Schrägstrich.
FidAppId Muss das Ganze übereinstimmen client_id Zurückgegeben von tokeninfo.
FidAppSecret Wird in den Dienst geladen, aber derzeit in keinem OpenID-Controller-Aufruf gesendet.

13. Session

Die Serversitzung ist jetzt Optional. RestFrontage aktiviert sie nur, wenn die Session enthält mindestens einen Parameter: Session-Services werden dann registriert und Session-Middleware nach dem Routing hinzugefügt.

Wenn der Abschnitt fehlt oder leer ist, registriert RestFrontage keinen Sitzungsdienst und fügt die entsprechende Middleware nicht hinzu. Das bedeutet, dass die Operation wie vor der bedingten Aktivierung gleich bleibt.

{
  "Session": {
    "IdleTimeout": "01:00:00",
    "Cookie": {
      "Name": "Immersive.Server.Session",
      "HttpOnly": true,
      "SameSite": "Strict",
      "SecurePolicy": "Always"
    }
  }
}

Legende Rolle
IdleTimeout Die maximale Zeitspanne, in der die Sitzungsdaten ungenutzt sind. Eine Aktivität, die die Sitzung verwendet, verlängert diese Zeit.
Cookie:Name Der Name des technischen Cookies mit der Session-ID.
Cookie:HttpOnly Verhindert, dass das JavaScript des Browsers das Session-Cookie liest. Behalten true.
Cookie:SameSite Kontrolliert das Senden des Cookies beim Surfen von einer anderen Seite aus. Strict ist das restriktivste Setting.
Cookie:SecurePolicy Mit Always, der Cookie wird nur über HTTPS gesendet.

Session verwendet die IDistributedCache bereits von RestFrontage gespeichert. Das Cookie enthält keine Sitzungsdaten: Es enthält lediglich eine Identifikator, mit der diese Daten im verteilten Cache abgerufen werden können.

Um die historische Operation explizit ohne Sitzung zu behalten, löschen Sie den Abschnitt vollständig oder lassen Sie ihn leer:

{
  "Session": {}
}

Die anerkannten Schlüssel sind:

  • Session:IdleTimeout ;
  • Session:Cookie:Name ;
  • Session:Cookie:HttpOnly ;
  • Session:Cookie:SameSite ;
  • Session:Cookie:SecurePolicy.

14. Verwaltung von Geheimnissen

Die AppSettings-Datei enthält Werte, die echte SQL-Passwörter, einen Azure Storage-Kontoschlüssel, einen Azure OpenAI-Schlüssel und einen JWT-Schlüssel sein können. Sie werden in dieser Dokumentation absichtlich nicht wiedergegeben.

Wenn diese Werte aktiv sind oder bereits festgelegt wurden, müssen sie regelmäßig erneuert werden. Mindestens müssen Folgendes ausgelagert werden:

  • ConnectionStrings__ImmersiveModelContainer ;
  • ConnectionStrings__SecurityModelContainer ;
  • ConnectionStrings__ServerDatabaseContext ;
  • ConnectionStrings__LicenseModelContainer ;
  • LogsSettings__ConnectionString ;
  • IOSettings__ConnectionString ;
  • Application__JWTSecurityKey ;
  • Application__OpenAI__ApiKey ;
  • OpenID__FidAppSecret ;
  • ApiKey__0__Key, und dann die folgenden Indizes;
  • IMMERSIVE_RECOVERY_KEY.

15. Sample-Clean-Produktion

Dieses Beispiel fasst die nützlichen RestFrontage-Einstellungen zusammen, ohne die standardmäßigen Core-ASP.NET-Themen:

{
  "Database": {
    "EnableLocalDB": false,
    "EnableSqlite": false
  },
  "ConnectionStrings": {
    "ImmersiveModelContainer": "<injecte hors du fichier>",
    "SecurityModelContainer": "<injecte hors du fichier>",
    "ServerDatabaseContext": "<injecte hors du fichier>",
    "LicenseModelContainer": "<injecte hors du fichier>"
  },
  "Environment": {
    "Name": "PROD",
    "BackgroundColor": "#B00020",
    "ForegroundColor": "#FFFFFF",
    "Size": 6
  },
  "Recovery": {
    "AccessKey": "<injecte via IMMERSIVE_RECOVERY_KEY>"
  },
  "SecurityDomainSynchronization": {
    "VersionCheckInterval": "00:00:01"
  },
  "LogsSettings": {
    "ProviderIdentifier": 10,
    "IncludeScopes": true,
    "IsEnabled": true,
    "ContainerName": "Log",
    "ConnectionString": "<injecte hors du fichier>"
  },
  "IOSettings": {
    "Storage": "AzureBlob",
    "ConnectionString": "<injecte hors du fichier>",
    "ContainerName": "immersivecontent"
  },
  "Application": {
    "Name": "RestFrontage PROD",
    "AllowBlankPassword": false,
    "PreWarmOrganizations": [],
    "TokenLifetime": "08:00:00",
    "JWTSecurityKey": "<injecte hors du fichier>",
    "TaskManagerLoopIdleTime": 60,
    "OpenAI": {
      "Endpoint": "https://<ressource>.openai.azure.com",
      "ApiKey": "<injecte hors du fichier>",
      "AssistantName": "asst_<identifiant>",
      "APIVersion": "2024-05-01-preview"
    }
  },
  "ApiKey": [],
  "Saml": {
    "FidUrl": "https://<fid>",
    "FidSsoPath": "/<chemin-sso>",
    "FidSloPath": "/<chemin-slo>",
    "EntityId": "<entity-id>",
    "LoginUrl": "https://<restfrontage>/api/Saml/Login",
    "LogoutUrl": "https://<restfrontage>/api/Saml/Logout"
  },
  "OpenID": {
    "FidUrl": "https://<fid>/",
    "FidAppId": "<client-id>",
    "FidAppSecret": "<injecte hors du fichier>"
  }
}

Unterabschnitte OpenAI, ApiKey, Saml und OpenID kann weggelassen werden, wenn die entsprechenden Funktionen nicht verwendet werden.

16. Inspektion vor der Indienststellung

  • Es ist nur ein Basismodus aktiviert.
  • Die Kanäle haben genau die erwarteten Namen.
  • Die Protokolldatenbank ist konfiguriert in LogsSettings:ConnectionString.
  • JWTSecurityKey ist zufällig, lang genug und in allen Fällen gleich.
  • AllowBlankPassword ist es wert false in Produktion.
  • In einer versionierten Datei werden keine wirklichen Geheimnisse gespeichert.
  • Organisationen aus PreWarmOrganizations wirklich existieren.
  • API-Schlüssel haben eine Anwendung, einen Schlüssel, einen bestehenden Benutzer und einen gültigen Zeitrahmen.
  • SAML enthält beide Pfade gut FidSsoPath und FidSloPath.
  • Werte ??? wurden überschrieben, bevor SAML oder OpenID aktiviert wurden.
  • Der Abschnitt Session fehlt oder ist leer, wenn keine Serversitzung gewünscht ist; ansonsten ist sein Cookie auf HTTPS gesetzt.
  • RestFrontage wurde nach einer Änderung der Verbindung, des Speichers, der Protokolle oder des JWT-Geheimnisses neu gestartet.