Configurazione

Questo documento descrive le impostazioni specifiche di RestFrontage e delle librerie GraphicStream che essa inizializza.

Argomenti standard ASP.NET Core come Logging, AllowedHosts o la scelta dell'ambiente ospitante, non sono dettagliati. Sono l'appannaggio del sistema sottostante a ASP.Net e IIS.

1. Panoramica

Sezione Stato Ruolo
Database Richiesto Sceglie SQL Server LocalDB, SQLite o SQL Server remoto e nomina i database aziendali e di sicurezza locali.
ConnectionStrings Richiesto in modalità SQL Server remota Configura le basi di business, sicurezza, server e licenze.
LogsSettings Richiesto Configura il logger GraphicStream e la destinazione del log.
IOSettings Richiesto nella pratica Configura media e archiviazione dei file.
Application Richiesto Configura l'identità del server, i token, le password vuote, il riscaldamento e il ciclo delle attività.
Application:OpenAI Condizionale Configura le funzioni di intelligenza artificiale utilizzando Azure OpenAI Assistants.
Environment Opzionale Mostra uno striscione per identificare visivamente l'ambiente.
SecurityDomainSynchronization Opzionale Regola la sincronizzazione del dominio di sicurezza tra le istanze.
Recovery Consigliato Protegge la console di recupero indipendentemente dalla base di sicurezza.
ApiKey Condizionale Dichiara le chiavi API associate agli utenti Immersive.
Saml Condizionale Configura l'autenticazione SAML con FID.
OpenID Condizionale Configura la validazione del token OpenID con il FID.
Session Opzionale Attiva la sessione server solo quando la sezione contiene almeno un parametro. Una sezione assente o vuota mantiene il funzionamento senza sessione.
IPX Inattivi La sezione IPX:Export del file fornito non viene letto da nessun componente.

2. Selezione della modalità database

RestFrontage impone questa priorità:

  1. Database:EnableLocalDB = true seleziona SQL Server LocalDB;
  2. altrimenti, Database:EnableSqlite = true seleziona SQLite;
  3. altrimenti, RestFrontage utilizza le stringhe di SQL Server di ConnectionStrings.

2.1 SQL Server Remoto o SQL Server Express

Requisiti minimi raccomandati per un dispiegamento completo:

{
  "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>"
  }
}

Chiave Richiesto Utilizzo e caduta
ImmersiveModelContainer Dati aziendali immersivi. Serve anche come riserva a ServerDatabaseContext.
SecurityModelContainer Utenti, gruppi, diritti e dominio della sicurezza. Serve anche come riserva per LicenseModelContainer.
ServerDatabaseContext No Compiti server e dati interni di IA. Storia IPX e sessioni di lavoro utilizzano anch'essi questa connessione. Senza valore o se non specificato, viene utilizzata la business base.
LicenseModelContainer No Licenze installate. Senza valore o se non specificato, viene utilizzata la base di sicurezza.

In modalità SQL Server, l'accesso alla storia business, sicurezza, server, licenze e IPX consente fino a cinque tentativi su errori SQL transitori, con un ritardo massimo di dieci secondi tra un tentativo e l'altro.

Il database di log non è configurato in ConnectionStrings. Utilizza esclusivamente LogsSettings:ConnectionString.

2.2 SQLite

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

Chiave Ruolo
ImmersiveSqlite Database aziendale e archiviazione della storia IPX.
ImmersiveSecuritySqlite Base di sicurezza.

LogsSettings:ConnectionString contiene il nome o il percorso relativo del file di log SQLite qui. Sia il logger che il contesto di ricerca usano lo stesso file.

I percorsi SQLite vengono risolti rispetto alla cartella contenente l'eseguibile RestFrontage e i file devono già esistere. Il codice corrente non crea i file SQLite mancanti.

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"
  }
}

Chiave Richiesto Ruolo
ImmersiveDatabaseName Nome file <nom>.mdf e la base aziendale.
ImmersiveSecurityDatabaseName Il nome del file e del database di sicurezza.
ImmersiveBacPacName No BACPAC iniziale della base aziendale.
ImmersiveSecurityBacPacName No BACPAC della base di sicurezza.
ImmersiveLogBacPacName No Database BACPAC dei giornali il cui nome è dato da LogsSettings:ConnectionString.

LogsSettings:ConnectionString contiene qui il nome logico del database di log LocalDB, senza estensione .mdf non una stringa SQL completa. Nell'esempio, RestFrontage apre o crea ImmersiveLogs.mdf, e poi il logger e il contesto di ricerca riutilizzano la stringa LocalDB effettivamente ottenuta.

I file MDF sono posizionati nella sottocartella Data situato accanto agli assemblaggi. Quando si crea un database, si cerca un BACPAC sotto Assets/Bacpac.

Questa modalità richiede SQL Server LocalDB sulla macchina. Come nella modalità SQLite, il codice corrente non salva ServerDatabaseContextLicenseSecurityModel.

2.4 Una destinazione unica per i log

La destinazione dei log è sempre definita da LogsSettings:ConnectionString. RestFrontage interpreta automaticamente il suo valore in base alla modalità scelta sotto Database :

Moda Valore atteso in LogsSettings:ConnectionString Risoluzione completata
Remote SQL Server La stringa completa di connessione SQL Server. La corda viene usata così com'è.
SQL Server LocalDB Nome logico del database, ad esempio ImmersiveLogs. RestFrontage apre o crea il file <nom>.mdf, e poi costruisce la stringa LocalDB.
SQLite Ad esempio, il nome relativo o il percorso del file ImmersiveLogs.sqlite. RestFrontage controlla il file accanto all'eseguibile e costruisce la connessione SQLite.

Questa risoluzione è comune a entrambi gli usi: il batch logger che scrive i messaggi e il contesto LogsContext che li consulta. Non possono quindi più indicare involontariamente due basi diverse.

3. Logs GraphicStream – LogsSettings

Il logger GraphicStream scrive i log in background in modo da non aprire una connessione per ogni messaggio. Quando viene prodotto un messaggio, viene posto in una coda in memoria. A intervalli regolari, il logger rileva un gruppo di messaggi da questa coda e lo inserisce nel database selezionato.

Le impostazioni in questa sezione definiscono quattro elementi: la destinazione, l'identificazione dello strumento produttore, la capacità della coda e come i messaggi vengono raggruppati e poi conservati.

{
  "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
  }
}

Chiave Predefinito Consigli per effetti reali e parametrizzazione
ConnectionString nessuna La destinazione unica del logger e il contesto di consultazione. In SQL Server remoto, compilare una stringa SQL completa; in LocalDB, il nome logico del database; in SQLite, il nome relativo o percorso del file. Il valore è indipendente dalla sezione ConnectionStrings.
ContainerName Log Il nome della tabella che riceve i log. Il valore raccomandato è Log, che corrisponde allo schema fornito da GraphicStream.
ProviderIdentifier 0 Ti permette di distinguere tra i diversi strumenti che iniettano nel Log, per condividere lo stesso database di log su più strumenti GraphicStream, come più RestFrontage e/o Hub.
IncludeScopes true Permette la lettura delle informazioni strutturate inserite negli ambiti di loging. Il logger riconosce in particolare Channel, che classifica il messaggio in un canale, e Data, che aggiunge dati aggiuntivi. Senza un canale fornito, il messaggio viene memorizzato nel canale Generic.
IsEnabled true Abilita il provider di log GraphicStream. À false, la sua coda di elaborazione viene interrotta e i nuovi messaggi non vengono registrati da questo fornitore. Questa impostazione non disabilita necessariamente altre destinazioni di log che potrebbero essere configurate.
FlushPeriod 00:00:01 Il tempo di attesa tra due cicli di scrittura. Con un secondo, i messaggi in sospeso vengono inviati al database circa ogni secondo. Un valore più breve riduce il tempo necessario per apparire nel database ma aumenta la frequenza degli hit; un valore più lungo raggruppa più scritture ma ne ritarda la visibilità. La durata deve essere strettamente positiva.
BackgroundQueueSize 1000 Il numero massimo di messaggi che possono aspettare in memoria prima di essere elaborati. Quando la coda limitata è piena, il produttore aspetta che un posto diventi disponibile, quindi un valore troppo basso può rallentare le richieste durante un afflusso di log. null Crea una coda illimitata, a costo di un potenziale consumo di memoria maggiore. Usa un valore strettamente positivo. 0 viene accettata dalla classe option ma non permette di costruire la coda in tempo reale.
BatchSize null Il numero massimo di messaggi che vengono rimossi dalla coda e inseriti in un ciclo. null processa tutti i messaggi disponibili. Un valore positivo limita la dimensione di ogni lotto; se la coda contiene più messaggi, il resto attende i cicli successivi. Un valore troppo basso può causare un ritardo quando vengono prodotti molti log.
TableSizeLimit 10240 Il numero massimo di righe mantenute. Dopo che un lotto è stato scritto, il logger cancella le voci più vecchie, in base alla loro data, per rimanere al di sotto di questo limite. null disattiva questa purga automatica. Un valore inserito deve essere strettamente positivo.

Esempio di come lavorare con i valori sopra: fino a 1.000 messaggi possono attendere in coda; circa ogni secondo, tutti i messaggi disponibili vengono scritti in batch poiché BatchSize vale null ; Dopo la scrittura, i log più vecchi vengono cancellati se la tabella supera le 10.240 righe.

Storage non dovrebbe essere scelta manualmente per RestFrontage. L'applicazione la obbliga a SQL per SQL Server e LocalDB remoti, oppure SQLite quando Database:EnableSqlite è abilitato. Qualsiasi valore Storage presente nel JSON è quindi sostituito da questa scelta calcolata.

FileSizeLimit, RetainedFileCountLimit, FileName e Extension esistono nella classe option, ma non sono utilizzati dai provider SQL Server e SQLite selezionati da RestFrontage.

I livelli sotto Logging e Logging:GraphicStreamLogs:LogLevel fanno parte del filtraggio log standard e non sono dettagliati qui.

4. Archiviazione dei file – IOSettings

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

Storage ConnectionString ContainerName
AzureBlob La stringa di connessione dell'account Azure Storage. Nome del contenitore: Blob.
FileSystem La cartella radice della memoria. Sottocartella aggiunta alla radice.
HostEnvironment Ignorato. Una sottocartella della directory radice di RestFrontage.
SQL La stringa di connessione SQL Server. Il nome della tabella che include il percorso e il contenuto binario.

Un cambiamento richiede che venga applicato un riavvio in modo coerente.

Pro HostEnvironment, tutte le operazioni usano la stessa radice: ContentRootPath, cioè la directory root di RestFrontage. Il test di esistenza, la lettura, la scrittura, la lista e la cancellazione sono tutti targetati <ContentRootPath>/<ContainerName>/<chemin> ; ConnectionString viene ignorato in questa modalità.

5. Impostazioni generali di RestFrontage – Application

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

Chiave Predefinito Effetto reale
Name null Nome restituito dall'API di sistema; Fallback visibile: ImmersiveRest Server.
AllowBlankPassword false Permette l'autenticazione con una password vuota e influenza l'audit dell'inizializzazione. Lascia a false In produzione.
PreWarmOrganizations null I nomi delle organizzazioni le cui cache sono precaricate all'avvio. Un array vuoto mantiene il caricamento on-demand.
TokenLifetime 08:00:00 Durata dei JWT emessi da RestFrontage.
JWTSecurityKey Nessuna affidabile HMAC secret usato per firmare e convalidare i JWT. Deve superare i 256 bit, rimanere invariato tra istanze e non essere mai commesso. Modificarlo invalida i token esistenti.
TaskManagerLoopIdleTime 60 Pausa, in secondi, tra due passaggi nel ciclo di attività del server. Usa un valore strettamente positivo.

La sezione Application Deve esistere: L'applicazione collegata viene quindi richiesta come servizio obbligatorio durante l'inizializzazione.

6. Azure OpenAI – Application:OpenAI

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

Chiave Obbligatorio per l'IA Ruolo
Endpoint L'URL della risorsa Azure OpenAI. La barra finale viene rimossa dal servizio.
ApiKey Valore inviato nell'intestazione api-key.
AssistantName Nonostante il nome, questo valore deve essere l'identificatore tecnico del wizard, ad esempio asst_....
APIVersion No Azure OpenAI versione API; predefinita 2024-05-01-preview.

L'assenza di questo sottosezione non impedisce l'avvio; l'errore viene lanciato la prima volta che viene chiamata una funzione AI che richiede questi valori.

7. Identificazione visiva - Environment

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

Chiave Predefinito Ruolo
Name vuoto Testo esposto sul banco della reception e nella traccia di briciole di pane. Senza un nome, il badge di benvenuto è nascosto.
BackgroundColor #333 Il colore CSS di sfondo della guida ambientale.
ForegroundColor white Colore CSS del testo.
Size 7 Suffisso di classe Bootstrap fs-{Size} in briciole di pane. Usa un valore valido di Bootstrap di 1 à 6.

Questa sezione descrive un segnale visivo di RestFrontage; è separato dal nome dell'ambiente ospitante ASP.NET Core.

8. Sincronizzazione della sicurezza – SecurityDomainSynchronization

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

VersionCheckInterval è l'intervallo tra due letture della versione distribuita del dominio di sicurezza. Quando un'altra istanza pubblica una nuova versione, RestFrontage ricarica il suo dominio locale.

Il valore predefinito è un secondo. Uno zero o una durata negativa viene sostituito da un secondo.

Tutte le istanze che condividono gli stessi database devono utilizzare un intervallo coerente. Un valore molto breve riduce il ritardo di propagazione ma aumenta i colpi distribuiti della cache.

9. Console di recupero – Recovery

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

AccessKey protegge la pagina /Setup/Tools, progettata per rimanere accessibile anche quando la base di sicurezza fallisce. Senza una chiave, la console non può essere sbloccata. Dopo la validazione, l'accesso viene mantenuto in un cookie firmato per 30 minuti.

La variabile dedicata dell'ambiente IMMERSIVE_RECOVERY_KEY ha la precedenza su Recovery:AccessKey e deve essere prioritizzato nella produzione.

Caso di sovraccarico di recupero

A Costi di recupero è un valore di configurazione di riserva che sostituisce temporaneamente il valore normale con lo stesso nome. Viene utilizzato per riparare un server con una connessione, log o storage configurati in modo errato, senza modificare direttamente il file appsettings.json originale.

La console /Setup/Tools salva questi valori nel file opzionale appsettings.Recovery.json, posizionato nella directory radice di RestFrontage. Ad esempio, se questo file contiene un nuovo valore per ConnectionStrings:ImmersiveModelContainer, questo valore sostituisce il valore di appsettings.json al prossimo avvio. Altri tasti che non sono nel file di recupero continuano a provenire dalla configurazione normale.

La console può creare o completare le seguenti sezioni:

  • Le quattro catene riconosciute di ConnectionStrings ;
  • LogsSettings ;
  • IOSettings.

Il file di recupero funziona quindi come uno strato parziale sovrapposto alla configurazione esistente:

  1. appsettings.json e altri file di configurazione usuali forniscono valori normali;
  2. appsettings.Recovery.json Sostituisce solo le chiavi che contiene.
  3. Le variabili di ambiente e gli argomenti di lancio hanno ancora la precedenza su entrambi i file.

Esempio:

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

In questo esempio, solo la base aziendale e il IOSettings sono sovraccarichi. La base di sicurezza, le licenze, i log e tutte le altre impostazioni mantengono i loro valori normali.

10. Autenticazione con chiave API - 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"
    }
  ]
}

Chiave Governo
App Valore atteso nell'intestazione x-app-name. Il confronto ignora il caso. Un valore vuoto disabilita l'input.
Key Valore atteso in x-api-key. Il confronto è distinto dalla maiuscolo e minuscolo. Un valore vuoto disabilita l'input.
User Il nome esatto e distinto di un utente esistente nel database di sicurezza. Questo utente diventa l'identità della query.
From Inizio di validità incluso.
To Scopo escluso dalla validità.

Usa le date ISO 8601 con fuso orario, idealmente in UTC con il suffisso Z. La durata del JWT interno creato per la richiesta è limitata al tempo rimanente prima 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"
  }
}

Chiave Ruolo
FidUrl L'URL base della federazione dell'identità.
FidSsoPath Percorso aggiunto a FidUrl per costruire la richiesta di connessione SAML.
FidSloPath Percorso aggiunto a FidUrl per costruire la richiesta di logout SAML.
EntityId Il mittente dichiarato nelle richieste SAML.
LoginUrl URL di ritorno connessione assoluta, inserito in AssertionConsumerServiceURL.
LogoutUrl URL di ritorno assoluto di logout.

12. OpenID – OpenID

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

Chiave Effetto reale
FidUrl URL base usato per evocare i percorsi relativi tokeninfo e userinfo. Tieni un ultimo taglio.
FidAppId Deve corrispondere al client_id Restituito da tokeninfo.
FidAppSecret Viene caricato nel servizio, ma attualmente non viene inviato in alcuna chiamata al controller OpenID.

13. Session

La sessione server è ora Opzionale. RestFrontage lo attiva solo se il Session contiene almeno un parametro: i servizi di sessione vengono quindi registrati e il middleware della sessione viene aggiunto dopo il routing.

Se la sezione manca o è vuota, RestFrontage non registra alcun servizio di sessione e non aggiunge il corrispondente middleware. Ciò significa che l'operazione rimane la stessa di prima dell'attivazione condizionata.

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

Chiave Ruolo
IdleTimeout Il tempo massimo in cui i dati della sessione sono inattivi. Un'attività che utilizza la sessione estende questo tempo.
Cookie:Name Il nome del cookie tecnico contenente l'ID sessione.
Cookie:HttpOnly Impedisce al JavaScript del browser di leggere il cookie di sessione. Keep true.
Cookie:SameSite Controlla l'invio del cookie quando si naviga da un altro sito. Strict è l'impostazione più restrittiva.
Cookie:SecurePolicy Con Always, il cookie viene inviato solo tramite HTTPS.

La sessione utilizza il IDistributedCache già memorizzato da RestFrontage. Il cookie non contiene dati di sessione: contiene solo un identificatore che può essere utilizzato per recuperare questi dati nella cache distribuita.

Per mantenere esplicitamente l'operazione storica senza sessione, elimina completamente la sezione o lasciala vuota:

{
  "Session": {}
}

Le tonalità riconosciute sono:

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

14. Gestione dei segreti

Il file appsettings contiene valori che possono essere password SQL reali, una chiave account Azure Storage, una chiave Azure OpenAI e una chiave JWT. Sono volutamente non riprodotti in questa documentazione.

Se questi valori sono attivi o sono stati commessi, devono essere rinnovati regolarmente. Al minimo, i seguenti devono essere esternalizzati:

  • ConnectionStrings__ImmersiveModelContainer ;
  • ConnectionStrings__SecurityModelContainer ;
  • ConnectionStrings__ServerDatabaseContext ;
  • ConnectionStrings__LicenseModelContainer ;
  • LogsSettings__ConnectionString ;
  • IOSettings__ConnectionString ;
  • Application__JWTSecurityKey ;
  • Application__OpenAI__ApiKey ;
  • OpenID__FidAppSecret ;
  • ApiKey__0__Key, e poi i seguenti indici;
  • IMMERSIVE_RECOVERY_KEY.

15. Produzione Campione Pulita

Questo esempio raggruppa le impostazioni utili di RestFrontage senza i classici argomenti Core ASP.NET:

{
  "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>"
  }
}

Sottosezioni OpenAI, ApiKey, Saml e OpenID può essere omesso quando le funzioni corrispondenti non vengono utilizzate.

16. Ispezione pre-commissione

  • È abilitata solo una modalità base.
  • I canali hanno esattamente i nomi che mi aspetto.
  • Il database di log è configurato in LogsSettings:ConnectionString.
  • JWTSecurityKey è casuale, abbastanza lungo, e lo stesso in tutte le ipotesi.
  • AllowBlankPassword vale false In produzione.
  • Non vengono memorizzati veri segreti in un file versionato.
  • Organizzazioni da PreWarmOrganizations esistono davvero.
  • Le chiavi API hanno un'applicazione, una chiave, un utente esistente e un periodo di tempo valido.
  • SAML contiene bene entrambi i percorsi FidSsoPath e FidSloPath.
  • Valori ??? erano sovrascritti prima di abilitare SAML o OpenID.
  • La sezione Session è assente o vuota se non si desidera alcuna sessione del server; altrimenti il suo cookie è impostato su HTTPS.
  • RestFrontage è stato riavviato dopo un cambiamento di connessione, archiviazione, log o JWT Secret.