Configurazione
- Tipo non definito
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.
Una chiave presente in appsettings.json non ha necessariamente un effetto. Le impostazioni inattive o ignorate sono esplicitamente riportate in questo documento.
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à:
Database:EnableLocalDB = trueseleziona SQL Server LocalDB;- altrimenti,
Database:EnableSqlite = trueseleziona SQLite; - altrimenti, RestFrontage utilizza le stringhe di SQL Server di
ConnectionStrings.
Se entrambi gli indicatori sono validi true, Vittorie LocalDB e il parametro SQLite viene ignorato.
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 |
Sì | Dati aziendali immersivi. Serve anche come riserva a ServerDatabaseContext. |
SecurityModelContainer |
Sì | 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.
In modalità SQLite, contesti ServerDatabaseContext e LicenseSecurityModel non vengono salvati. Le funzioni che dipendono da essi quindi non hanno la loro memoria completa.
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 |
Sì | Nome file <nom>.mdf e la base aziendale. |
ImmersiveSecurityDatabaseName |
Sì | 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 ServerDatabaseContext né LicenseSecurityModel.
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.
In LocalDB, non popolare una stringa SQL completa in LogsSettings:ConnectionString, ma solo il nome logico del database. In SQLite, il file deve già esistere.
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.
Con il provider SQL Server, il meccanismo attuale per la purga TableSizeLimit Mira esplicitamente alla tabella Log. Se ContainerName ha un nome diverso, nuovi messaggi vengono inviati a quell'altra tabella, ma la purga continua Log. Il provider SQLite elimina la tabella specificata. È comunque consigliato di mantenerla ContainerName à Log.
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.
In produzione, AllowBlankPassword deve rimanere a false e JWTSecurityKey deve essere un segreto casuale di almeno 32 byte, identico su tutte le istanze.
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 |
Sì | L'URL della risorsa Azure OpenAI. La barra finale viene rimossa dal servizio. |
ApiKey |
Sì | Valore inviato nell'intestazione api-key. |
AssistantName |
Sì | 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:
appsettings.jsone altri file di configurazione usuali forniscono valori normali;appsettings.Recovery.jsonSostituisce solo le chiavi che contiene.- 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.
Dopo un salvataggio, i pulsanti diagnostici della console possono testare i nuovi valori con oggetti temporanei. Al contrario, i servizi effettivamente utilizzati da RestFrontage—contesti di database, logger e servizio file—sono costruiti all'avvio. Pertanto, RestFrontage deve essere riavviato affinché l'overhead venga utilizzato dall'applicazione.
Il appsettings.Recovery.json può contenere segreti e non dovrebbe essere versionato. Un sovraccarico rimane attivo ad ogni riavvio finché la chiave rimane in quel file. Correggere la configurazione normale non annulla automaticamente un sovraccarico precedente: anche la chiave corrispondente deve essere rimossa dal file di recupero.
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.
Attiva Session non sovrascrive l'autenticazione esistente. Il cookie di sessione impostato qui è separato dal cookie di autenticazione RestFrontage.Auth, che rimane impostato a otto ore. Il middleware della sessione crea il cookie della sessione solo quando un componente effettivamente utilizza HttpContext.Session.
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.
I file versionati dovrebbero mantenere solo i valori di override non funzionali.
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. -
AllowBlankPasswordvalefalseIn produzione. - Non vengono memorizzati veri segreti in un file versionato.
- Organizzazioni da
PreWarmOrganizationsesistono davvero. - Le chiavi API hanno un'applicazione, una chiave, un utente esistente e un periodo di tempo valido.
- SAML contiene bene entrambi i percorsi
FidSsoPatheFidSloPath. - 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.