Riferimento della configurazione
Tutte le variabili d'ambiente di Frontdoor con i valori predefiniti, la checklist di produzione, i controlli di sessione tra origini e il log di avvio.
In questa pagina
Frontdoor legge la configurazione dalle variabili d'ambiente, di solito tramite un file .env. Il progetto include due esempi: .env.example.docker per Docker e .env.example.node per Node.js.
Con Docker, docker-compose.yml imposta da sé NODE_ENV, PORT, DATABASE_PATH e le cartelle sotto /data; questi valori non si possono cambiare dal .env.
Variabili d'ambiente
Server e archiviazione
| Variabile | Descrizione | Predefinito |
|---|---|---|
NODE_ENV |
production disattiva il Login Dev e attiva i cookie sicuri |
- (production in Docker) |
PORT |
Porta del server Express | 3001 |
DATABASE_PATH |
Percorso del file SQLite | ./frontdoor.db |
AVATAR_CACHE_DIR |
Cache su disco per gli avatar degli utenti e i relativi metadati | ./data/avatar-cache |
APP_ICON_CACHE_DIR |
Cache su disco per le icone delle app caricate e gli SVG incollati | ./data/app-icon-cache |
BRANDING_ASSET_DIR |
Archiviazione su disco per il logo aziendale facoltativo | ./data/branding |
PLUGIN_ASSET_DIR |
Archiviazione su disco per i pacchetti dei plugin (sistema di plugin attualmente bloccato) | ./data/plugins |
BACKUP_MAX_UPLOAD_MB |
File di backup più grande accettato da Verifica backup e dal ripristino. I file caricati vengono scritti in streaming su un file temporaneo, non tenuti in memoria. Un reverse proxy davanti a Frontdoor richiede un limite corrispondente sulla dimensione delle richieste | 1024 |
AVATAR_CACHE_TTL_DAYS |
Intervallo di aggiornamento degli avatar Microsoft 365 / Gravatar in cache | 14 |
AVATAR_CACHE_MISS_TTL_DAYS |
Intervallo prima di un nuovo tentativo quando non è stato trovato alcun avatar | 30 |
TIMEZONE (o TZ) |
Fuso orario del server usato per data e ora dei log. Il valore predefinito per l'interfaccia si imposta in Personalizza | UTC |
COMMIT_SHA |
Commit registrato nei backup (argomento di build Docker) | - |
Dominio e origini
| Variabile | Descrizione | Predefinito |
|---|---|---|
BASE_DOMAIN |
Dominio di base, senza protocollo | frontdoor.local |
FRONTEND_URL |
URL del frontend con il protocollo. È considerata attendibile anche come origine per le richieste che modificano dati | https://frontdoor.local |
CORS_ALLOWED_ORIGINS |
Elenco, separato da virgole, delle origini autorizzate a chiamare Frontdoor con credentials: 'include', per le pagine con cookie condiviso o con controllo della sessione. Lascialo vuoto per disattivare CORS |
- |
Accesso e sessioni
| Variabile | Descrizione | Predefinito |
|---|---|---|
DEV_LOGIN |
Attiva il Login Dev locale senza SSO Microsoft (ignorato in produzione) | false |
AZURE_CLIENT_ID |
ID applicazione (client) della registrazione di app in Entra | - |
AZURE_CLIENT_SECRET |
Client secret della registrazione di app in Entra | - |
AZURE_TENANT_ID |
ID directory (tenant) | - |
AZURE_REDIRECT_URI |
URI di reindirizzamento per il callback SSO | https://frontdoor.local/api/auth/microsoft/callback |
JWT_SECRET |
Secret di firma dei JWT | - |
JWT_EXPIRES_IN |
Durata del token JWT | 7d |
JWT_ISSUER |
Emittente dei token di sessione e SSO. Le app satellite che verificano i token devono usare lo stesso valore | frontdoor |
IMPERSONATION_TIMEOUT_MINUTES |
Minuti in cui un amministratore può agire come un utente prima che l'impersonation termini (limitati tra 5 e 240) | 30 |
ADMIN_EMAILS |
Email degli owner, separate da virgole, promossi in automatico | - |
ADMIN_API_KEY |
Chiave API per gli endpoint bulk | - |
Gruppi Microsoft Entra e notifiche
| Variabile | Descrizione | Predefinito |
|---|---|---|
ENTRA_GROUP_SYNC |
Rileva le appartenenze ai gruppi Entra all'accesso e attiva i flussi di importazione e sincronizzazione per gli amministratori | false (true in docker-compose.yml) |
ENTRA_TENANT_REFRESH_MINUTES |
Minuti minimi tra due aggiornamenti, avviati dagli accessi, del catalogo dei gruppi Entra dell'intero tenant. Una sincronizzazione manuale lo aggiorna sempre; 0 lo aggiorna a ogni accesso |
360 |
ENTRA_DELETED_GROUP_POLICY |
Cosa succede ai membri di un gruppo Entra che Microsoft Entra segnala come eliminato: freeze mantiene il loro accesso finché un amministratore non decide; revoke lo rimuove al prossimo accesso o alla prossima sincronizzazione. In entrambi i casi il gruppo viene contrassegnato, se ne conserva un'istantanea e gli amministratori vengono avvisati |
freeze |
NOTIFICATION_RETENTION_DAYS |
Giorni per cui una notifica per gli amministratori già risolta viene conservata prima che la pulizia giornaliera la rimuova | 30 |
Limiti di frequenza
Tutti i limiti valgono per singolo indirizzo IP.
| Variabile | Descrizione | Predefinito |
|---|---|---|
AUTH_RATE_LIMIT_MAX / AUTH_RATE_LIMIT_WINDOW_MS |
Endpoint di accesso Microsoft | 5000 / 15 min |
RBAC_RATE_LIMIT_MAX / RBAC_RATE_LIMIT_WINDOW_MS |
Modifiche a gruppi e utenti | 500 / 15 min |
API_RATE_LIMIT_MAX / API_RATE_LIMIT_WINDOW_MS |
Il resto dell'API | 6000 / 15 min |
Checklist per la produzione
Per un'installazione reale, imposta almeno:
NODE_ENV=production(già impostato dadocker-compose.yml; il Login Dev è sempre disattivato in produzione)BASE_DOMAINeFRONTEND_URLAZURE_CLIENT_ID,AZURE_CLIENT_SECRET,AZURE_TENANT_IDeAZURE_REDIRECT_URI- un
JWT_SECRETunivoco di almeno 32 caratteri ENTRA_GROUP_SYNCse vuoi la sincronizzazione dei gruppi EntraCORS_ALLOWED_ORIGINSse una pagina statica o un'app satellite su un'altra origine deve chiamare Frontdoor con le credenziali
Consigliati:
ADMIN_EMAILSADMIN_API_KEYJWT_EXPIRES_IN- un fuso orario predefinito del tenant in Personalizza, se vuoi qualcosa di diverso da UTC
Se un valore obbligatorio manca o non è valido, Frontdoor si ferma all'avvio con un messaggio chiaro nei log, invece di fallire più tardi con un errore di autenticazione.
Controllo della sessione da altre origini
CORS_ALLOWED_ORIGINS serve alle pagine che devono solo sapere se l'utente ha già una sessione Frontdoor attiva: per esempio una semplice pagina statica o una pagina di download su un dominio vicino.
Se ospiti una pagina su https://contoso.com, imposta:
CORS_ALLOWED_ORIGINS=https://contoso.com
La pagina può quindi chiedere a Frontdoor se la sessione del browser è autenticata:
<script>
async function checkSession() {
const response = await fetch('https://frontdoor.contoso.com/api/auth/me', {
credentials: 'include',
});
if (response.ok) {
const { user } = await response.json();
console.log('Signed in as:', user.email || user.displayName);
return;
}
window.location.href = 'https://frontdoor.contoso.com/login';
}
checkSession().catch(() => {
window.location.href = 'https://frontdoor.contoso.com/login';
});
</script>
credentials: 'include' dice al browser di inviare il cookie frontdoor_token con la richiesta. Frontdoor accetta la richiesta da un'altra origine solo se l'origine della pagina è elencata in CORS_ALLOWED_ORIGINS.
Log di avvio
All'avvio il server stampa un riepilogo della configurazione, con i valori sensibili oscurati:
Frontdoor startup configuration:
NODE_ENV=production
PORT=3001
DATABASE_PATH=/data/frontdoor.db
BRANDING_ASSET_DIR=/data/branding
BASE_DOMAIN=contoso.com
FRONTEND_URL=https://frontdoor.contoso.com
CORS_ALLOWED_ORIGINS=[empty]
TIMEZONE=UTC
DEV_LOGIN=disabled
AZURE_CLIENT_ID=[set]
AZURE_CLIENT_SECRET=[set]
AZURE_TENANT_ID=[set]
AZURE_REDIRECT_URI=https://frontdoor.contoso.com/api/auth/microsoft/callback
JWT_SECRET=[set]
ADMIN_EMAILS=1 owner configured
Gli avvisi segnalano i valori predefiniti e le impostazioni valide ma deboli, per esempio:
BASE_DOMAIN is not set, defaulting to frontdoor.localJWT_SECRET is shorter than 32 characters; use a longer random secret in production