Protezione con password
Proteggi la documentazione con una password condivisa, per l'intero sito o per pagine selezionate, senza spostare alcun contenuto fuori dal repository Git.
La protezione con password limita l'accesso alla documentazione che resta in Git ma non deve essere pubblica: runbook, guide pre-rilascio, documenti riservati ai partner, funzionalità in accesso anticipato. Una sola password condivisa protegge l'intero sito o un insieme di pagine. Nulla lascia il repository.
Gli screenshot mostrano l'interfaccia in inglese.
Per l'autenticazione per singolo utente, usa autenticazione JWT. Protegge la documentazione tramite il tuo sistema di login, con sessioni per utente e accesso alle pagine basato sui gruppi.
La protezione con password richiede un progetto Jamdesk collegato a un repository Git. La configurazione risiede in docs.json e viene applicata con la normale build.
Quale modalità scegliere?
Scegli la modalità in base a ciò che è pubblico.
| Modalità intero sito | Modalità pagine specifiche | |
|---|---|---|
| Quando usarla | Tutto è privato: documentazione interna di ingegneria, una copia di staging del sito pubblico, un prodotto non ancora rilasciato. | La maggior parte della documentazione è pubblica. Nascondi alcune pagine (un runbook, una funzionalità beta, un riferimento API interno). |
| Come attivarla | Imposta auth.password.enabled: true in docs.json. | Contrassegna le pagine come private con private: true nel frontmatter, oppure elenca i percorsi in auth.password.private[]. |
| Eccezioni pubbliche | Sì: puoi contrassegnare singole pagine, gruppi di navigazione o pattern glob come pubblici. | Non applicabile. Ogni pagina è pubblica finché non la contrassegni come privata. |
La scheda della dashboard, la schermata di sblocco e i controlli di rotazione e revoca sono gli stessi in entrambe le modalità. Per cambiare modalità, modifica docs.json e pubblica le modifiche.
Proteggi l'intero sito
Dichiara la protezione dell'intero sito in docs.json. Il campo hint è facoltativo: è l'unico suggerimento visibile ai lettori su come ottenere la password.
{
"$schema": "https://jamdesk.com/docs.json",
"name": "Acme Docs",
"theme": "jam",
"auth": {
"password": {
"enabled": true,
"hint": "Ask #docs-access on Slack"
}
}
}I suggerimenti sono testo semplice, massimo 200 caratteri, senza HTML.
Non inserire la password in docs.json. Impostala nella dashboard dopo la build. Il repository contiene solo il flag di attivazione e un suggerimento facoltativo.
Invia la modifica al branch configurato. La build attiva la protezione con password in modalità intero sito.
git add docs.json
git commit -m "Turn on password protection"
git pushLa scheda della dashboard passa da Off a Password non impostata. Il sito è bloccato. Ogni pagina restituisce 401 e mostra la schermata della password. Nessuna password funziona finché non ne impostI una. Le pagine che hai contrassegnato come pubbliche restano aperte. Le chiavi API del progetto continuano a funzionare per la Search API, il server MCP, gli URL .md e i file llms. Per rendere di nuovo pubblico l'intero sito, imposta auth.password.enabled su false e pubblica.

Apri Impostazioni progetto nella dashboard e scorri fino alla scheda Protezione con password. Digita una password (minimo 8 caratteri). Fai clic su Imposta password.
La scheda passa a On. I visitatori senza password vedono la schermata di sblocco.

Jamdesk non memorizza mai la password in chiaro. Viene sottoposta a hash con scrypt nel database della dashboard e non viene mai scritta nel repository o in docs.json. Jamdesk non può inviartela via email se la dimentichi. In quel caso, ruota la password.
Apri il sito della documentazione in una finestra privata del browser (oppure usa curl) e verifica di ottenere la schermata di sblocco. Prova una password errata per controllare lo stato di errore, poi inserisci quella corretta.
# Should respond with HTTP/1.1 401 and the unlock HTML
curl -I https://acme.jamdesk.app/
# Submit the password. On success, sets the jd_auth_<slug> cookie.
curl -i -X POST https://acme.jamdesk.app/jd/unlock \
-d "password=your-passphrase&from=/"Uno sblocco riuscito restituisce un redirect 303 con l'intestazione Set-Cookie: jd_auth_acme=...; HttpOnly; Secure; SameSite=Lax; Max-Age=2592000. Invia quel cookie con la richiesta successiva.
Eccezioni pubbliche
Mantieni pubbliche pagine specifiche mentre il resto del sito è protetto, ad esempio una landing page di marketing o un modulo di iscrizione.
Puoi contrassegnare una pagina come pubblica in tre modi. La build unisce le indicazioni in un'unica allow-list.
Frontmatter è l'opzione più granulare. Aggiungi public: true a un file .mdx per renderlo pubblico:
---
title: Get started
public: true
---
Gruppi di navigazione coprono un'intera sezione. Imposta public: true su un group o un tab nella navigazione di docs.json per rendere pubbliche tutte le pagine al suo interno. Ad esempio, una scheda "Marketing" accanto alla documentazione interna privata:
{
"navigation": {
"tabs": [
{
"tab": "Marketing",
"public": true,
"groups": [
{
"group": "Overview",
"pages": ["landing", "pricing", "changelog"]
}
]
},
{
"tab": "Internal",
"groups": [
{ "group": "Runbooks", "pages": ["deploys", "oncall"] }
]
}
]
}
}I glob espliciti in auth.password.public[] coprono ciò che frontmatter e navigazione non possono: landing page di primo livello, route generate dinamicamente o un sottoalbero che preferisci non riscrivere.
{
"auth": {
"password": {
"enabled": true,
"hint": "Ask #docs-access on Slack",
"public": [
"/landing",
"/pricing",
"/marketing/**",
"/blog/*"
]
}
}
}I glob supportano * (un segmento del percorso) e ** (qualsiasi profondità). La validazione rifiuta un / isolato, che sbloccherebbe l'intero sito. La scheda della dashboard mostra l'allow-list risolta dall'ultima build.
Proteggi solo alcune pagine
In modalità pagine specifiche tutto è pubblico per impostazione predefinita. Abilita il blocco solo per le singole pagine.
Aggiungi private: true al frontmatter della pagina.
---
title: Incident Runbook
description: What to do when the deploys dashboard is on fire.
private: true
---Per mantenere l'elenco dei percorsi protetti in un unico file, aggiungili in auth.password.private[] in docs.json. I due approcci sono cumulativi.
{
"auth": {
"password": {
"hint": "Ask the on-call engineer",
"private": ["/admin/runbook", "/internal/api-keys"]
}
}
}Non serve enabled: true. Impostare auth.password.private[] senza enabled attiva la modalità pagine specifiche.
Invia le modifiche. La build successiva attiva la protezione in modalità pagine specifiche. La dashboard ti chiederà di impostare una password.
git add content/runbook.mdx docs.json
git commit -m "Gate the incident runbook"
git pushApri Impostazioni progetto, trova la scheda Protezione con password e imposta una password. L'intestazione della scheda riporta On con Pagine specifiche invece di Intero sito. Elenca le pagine private risolte dalla build.

Naviga nel sito della documentazione. Le pagine pubbliche si caricano come prima. Le pagine private reindirizzano alla schermata di sblocco. La password ti autentica per 30 giorni su quel dispositivo.
Cosa vedono i visitatori
Una pagina protetta mostra una scheda di sblocco centrata con il nome del sito e un suggerimento facoltativo. Non ci sono barra laterale né navigazione.

La scheda riporta il logo del sito e il colore primario definiti in docs.json. Il campo password ha un pulsante per mostrare il testo e il focus automatico.
Una password errata mostra la stessa scheda con un messaggio di errore, un campo vuoto e una breve pausa tra i tentativi. Nulla nella pagina distingue "password errata" da "nessuna password ancora inserita".

La password corretta imposta un cookie firmato. Dura fino alla scadenza della sessione o fino alla revoca.
Strumenti AI e chiavi API
Gli strumenti che non possono inserire la password, come un client MCP o uno script che recupera llms.txt, possono usare una chiave API del progetto. La chiave funziona per il server MCP, per gli URL di pagina .md e per i file llms. Non apre mai le pagine HTML né la chat AI.
Lascia accedere il tuo team con Jamdesk
I tuoi collaboratori hanno già un account Jamdesk, quindi non hanno bisogno anche della password condivisa. Aggiungi allowMembers e la schermata di sblocco mostra un pulsante Accedi con Jamdesk accanto al campo password. I lettori esterni continuano a usare la password.
{
"auth": {
"password": {
"enabled": true,
"allowMembers": true
}
}
}È disattivato per impostazione predefinita. Pubblica la modifica e il pulsante comparirà dopo la build successiva.
Quando un collaboratore fa clic su Accedi con Jamdesk, si apre la dashboard di Jamdesk. Se ha già effettuato l'accesso, viene riportato direttamente alla pagina che stava leggendo. Altrimenti accede prima e torna poi alla documentazione.
Chi può accedere
Può accedere il proprietario del progetto, così come chiunque sia stato aggiunto come membro in Impostazioni → Membri nella dashboard. Chi invitate può leggere la documentazione una volta accettato l'invito.
Un membro ottiene anche accesso completo da editor al progetto nella dashboard. Aggiungi solo persone di cui ti fidi per questo.
Come funzionano le sessioni del team
L'accesso di un membro del team dura 14 giorni. Dopo, il collaboratore deve fare di nuovo clic sul pulsante.
Per revocare l'accesso a qualcuno, rimuovilo dal progetto. Il suo accesso alla documentazione cessa entro circa un minuto.
Cambiare la password condivisa non disconnette i membri del team, e non li disconnette nemmeno Revoca tutte le sessioni. Gli accessi del team non influiscono sulle sessioni con password.
Una volta autenticato, un collaboratore può usare la chat AI, il server MCP, gli URL .md e llms.txt esattamente come farebbe dopo aver digitato la password.
Documentazione solo per il team
Attiva enabled e allowMembers, poi non impostare alcuna password nella dashboard. La schermata di sblocco mostra solo il pulsante di accesso, così il team può entrare e nessun altro può farlo.
Domini e piani
L'accesso del team funziona sul sottodominio <slug>.jamdesk.app e sul dominio personalizzato collegato al progetto. Include le configurazioni Cloudflare Worker e con sottopercorso che servono la documentazione dal dominio personalizzato. Altri alias, come una copia www. del dominio, non sono supportati. Ogni host mantiene la propria sessione, quindi l'accesso su uno non vale per l'altro.
Come la protezione con password, anche l'accesso del team richiede un piano a pagamento. Se il piano del proprietario scade, i nuovi accessi del team si interrompono. Le sessioni già avviate continuano a funzionare fino alla scadenza, al massimo 14 giorni dopo.
allowMembers si applica solo alla protezione con password. I siti che usano autenticazione JWT non sono interessati.
Rotazione e revoca delle sessioni
Apri la scheda Protezione con password, digita una nuova password nel campo Ruota password e fai clic su Salva nuova password. La vecchia password smette di funzionare alla richiesta successiva. La rotazione è immediata e non richiede una nuova build.
Per disconnettere tutte le sessioni attive senza cambiare la password (ad esempio se un laptop è stato smarrito), fai clic su Revoca tutte le sessioni. Questo incrementa un contatore di versione lato server. Ogni cookie emesso prima dell'incremento smette di funzionare. I visitatori devono reinserire la password attuale.
Disattivare la protezione
Disattiva la protezione modificando docs.json e pubblicando.
- Intero sito: rimuovi
auth.password.enabled(o impostalo sufalse). - Pagine specifiche: rimuovi ogni marcatore
private: truee svuotaauth.password.private.
La build successiva elimina l'hash della password memorizzato e riporta la scheda su Off. Per riattivare la protezione in seguito serve una nuova password.
Il repository sorgente non è protetto da password. La protezione con password limita il sito di documentazione ospitato su *.jamdesk.app (o sul tuo dominio personalizzato). Un repository GitHub pubblico espone comunque i contenuti MDX. Rendi privato il repository per una protezione completa dei contenuti.
Regole di precedenza
Una pagina può corrispondere a più segnali. L'ordine di risoluzione, dal più specifico al meno specifico:
auth.password.enabled: trueprotegge l'intero sito.private: truesulle singole pagine diventa ridondante.- Una pagina con
public: trueeprivate: trueè pubblica. Vince il pubblico. public: truenel frontmatter,public: truenel gruppo di navigazione e i glob diauth.password.public[]si uniscono in un'unica allow-list. Se un segnale indica che una pagina è pubblica, lo è.auth.password.private[]senzaauth.password.enabledattiva la modalità pagine specifiche.
Come funzionano le sessioni e il rate limiting
Il cookie di sessione. Dopo uno sblocco riuscito, Jamdesk imposta un cookie chiamato jd_auth_<slug> (ad esempio jd_auth_acme). È HttpOnly, Secure, SameSite=Lax, limitato all'host e firmato con HMAC-SHA256. Il payload include lo slug del progetto, il contatore di versione corrente e una data di scadenza. Una modifica fa fallire la validazione. La durata predefinita è 30 giorni, rinnovata a ogni sblocco riuscito.
Rate limiting. L'endpoint di sblocco applica due contatori all'ora: 10 tentativi per IP e 100 tentativi per progetto. Vengono controllati prima del confronto dell'hash scrypt. Un tentativo di forza bruta non può consumare CPU né far trapelare informazioni sui tempi. Superare uno dei due limiti restituisce 429 Too Many Requests con un'intestazione Retry-After.
Archiviazione. La tua password viene sottoposta a hash con scrypt e memorizzata nel Firestore della dashboard. Non finisce mai nel repository, in docs.json o in un artefatto di build. Se la perdi, ruotala. Non esiste un percorso di recupero.
Test durante lo sviluppo locale
jamdesk dev esegue la documentazione con i contenuti R2 e la configurazione attivi. La protezione con password non viene applicata nel server di sviluppo locale. Puoi visualizzare in anteprima le pagine protette senza password.
Per testare il blocco, apri il sito pubblicato su <slug>.jamdesk.app (o sul tuo dominio personalizzato) in una finestra del browser senza il cookie.
Risoluzione dei problemi
Probabilmente la scheda della dashboard mostra Password non impostata. La protezione richiede (1) la configurazione pubblicata in docs.json e (2) una password impostata in Impostazioni progetto. Finché non imposti la password, ogni richiesta restituisce 401 con la schermata di sblocco come corpo.
Il suo browser ha un vecchio cookie jd_auth_<slug> emesso prima della rotazione. Attendi 30 giorni che il cookie scada, fai clic su Revoca tutte le sessioni nella dashboard, oppure chiedigli di cancellare i cookie del dominio della documentazione. La visita successiva chiederà la password attuale.
Non direttamente. Jamdesk usa una sola password condivisa per sito. Per un accesso differenziato per gruppo, suddividi la documentazione in più progetti (ciascuno con la propria password) oppure usa la modalità pagine specifiche con confini pubblico/privato separati per ciascun pubblico.
Sì. Il cookie di sblocco è legato all'host. Il sottodominio *.jamdesk.app e il tuo dominio personalizzato si autenticano in modo indipendente. Sbloccarne uno non sblocca l'altro.
Le configurazioni con sottopercorso (documentazione su tuosito.com/docs dietro il tuo proxy) funzionano subito. Il modulo di sblocco invia i dati sotto il prefisso di percorso /_jd/. Ogni configurazione proxy documentata inoltra già questo percorso. Attivare o disattivare la protezione con password non richiede modifiche al proxy.
Per un proxy configurato prima che la guida di setup aggiungesse l'inoltro di /_jd/, aggiungi /_jd/* ai percorsi inoltrati.
No. I siti protetti impostano noindex, nofollow sulla schermata di sblocco e restituiscono 401 per ogni pagina protetta. I crawler non possono indicizzare nulla dietro il blocco. Le pagine pubbliche all'interno di un sito protetto restano indicizzate.
