Konfiguration
- Nicht definierter Typ
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.
Ein Schlüssel präsent in appsettings.json hat nicht unbedingt eine Auswirkung. Inaktive oder ignorierte Einstellungen werden in diesem Dokument ausdrücklich gemeldet.
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:
Database:EnableLocalDB = truewählt SQL Server LocalDB aus;- ansonsten gilt:
Database:EnableSqlite = truewählt SQLite aus; - ansonsten verwendet RestFrontage die SQL-Server-Strings von
ConnectionStrings.
Wenn beide Indikatoren gültig sind true, LocalDB gewinnt und der SQLite-Parameter wird ignoriert.
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.
Im SQLite-Modus werden Kontexte ServerDatabaseContext und LicenseSecurityModel nicht gespeichert werden. Die Funktionen, die von ihnen abhängen, haben daher nicht ihren vollen Speicher.
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.
In der LocalDB solltest du keinen vollständigen SQL-String in ausfüllen. LogsSettings:ConnectionString, aber nur den logischen Namen der Datenbank. In SQLite muss die Datei bereits existieren.
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.
Mit dem SQL-Server-Anbieter ist der aktuelle Mechanismus für das Löschen TableSizeLimit Explizit zielt die Tabelle an Log. Wenn ContainerName einen anderen Namen hat, werden neue Nachrichten an diese andere Tabelle gesendet, aber die Säuberung bleibt Log. Der SQLite-Provider löscht die angegebene Tabelle. Es wird weiterhin empfohlen, die angegebene Tabelle beizubehalten ContainerName à Log.
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.
In der Produktion, AllowBlankPassword Muss bei bleiben false und JWTSecurityKey muss ein zufälliges Geheimnis von mindestens 32 Bytes sein, das in allen Instanzen identisch ist.
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:
appsettings.jsonund andere übliche Konfigurationsdateien liefern Normalwerte;appsettings.Recovery.jsonErsetzt nur die Schlüssel, die es enthält.- 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.
Nach einem Speicherstand können die Diagnosetasten der Konsole die neuen Werte mit temporären Objekten testen. Im Gegensatz dazu werden die tatsächlich von RestFrontage genutzten Dienste – Datenbankkontexte, Logger und Dateidienst – beim Start aufgebaut. Daher muss RestFrontage neu gestartet werden, damit der Overhead von der Anwendung genutzt werden kann.
Die appsettings.Recovery.json kann Geheimnisse enthalten und sollte nicht versioniert werden. Eine Überladung bleibt bei jedem Neustart aktiv, solange ihr Schlüssel in dieser Datei bleibt. Eine Korrektur der normalen Konfiguration kehrt eine alte Überladung dann nicht automatisch rückgängig machen: Der entsprechende Schlüssel muss ebenfalls aus der Wiederherstellungsdatei entfernt werden.
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.
Aktivieren Session überschreibt nicht die bestehende Authentifizierung. Das hier gesetzte Session-Cookie ist vom Authentifizierungscookie getrennt RestFrontage.Auth, die auf acht Stunden eingestellt bleibt. Die Session-Middleware erstellt das Session-Cookie nur, wenn eine Komponente tatsächlich verwendet wird HttpContext.Session.
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.
Versionierte Dateien sollten nur nicht funktionierende Override-Werte behalten.
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. -
JWTSecurityKeyist zufällig, lang genug und in allen Fällen gleich. -
AllowBlankPasswordist es wertfalsein Produktion. - In einer versionierten Datei werden keine wirklichen Geheimnisse gespeichert.
- Organisationen aus
PreWarmOrganizationswirklich existieren. - API-Schlüssel haben eine Anwendung, einen Schlüssel, einen bestehenden Benutzer und einen gültigen Zeitrahmen.
- SAML enthält beide Pfade gut
FidSsoPathundFidSloPath. - Werte
???wurden überschrieben, bevor SAML oder OpenID aktiviert wurden. - Der Abschnitt
Sessionfehlt 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.