Generatore di header Basic Auth

Inserisci nome utente e password per ottenere l’header Authorization: Basic e un comando curl pronto da eseguire, oppure incolla un header esistente per vedere le credenziali che contiene.

Header Authorization
Comando curl

Decodifica un header esistente

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Inserisci il nome utente e la password.
  2. Copia l’header Authorization generato nel tuo client, oppure usa il comando curl per provare la richiesta.
  3. Per leggere un header esistente, incollalo nella sezione Decodifica un header esistente: verranno mostrati nome utente e password.

Come funziona l’autenticazione HTTP Basic

L’autenticazione Basic è definita nella RFC 7617. Quando una risorsa è protetta, il server risponde con 401 Unauthorized e un header WWW-Authenticate: Basic realm="...". Il client unisce allora nome utente e password con i due punti, codifica il risultato in Base64 e lo invia con ogni richiesta:

Authorization: Basic base64(username ":" password)

# Esempio dalla RFC 7617: utente "Aladdin", password "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

I browser gestiscono questo scambio da soli e mostrano una finestra di accesso, mentre script e client API di solito inviano l’header già con la prima richiesta, senza attendere la richiesta di autenticazione del server. Poiché i due punti separano i due valori, il nome utente non può contenerli; la password sì. Un server può aggiungere charset="UTF-8" alla sua richiesta di autenticazione per indicare che le credenziali non ASCII sono attese in UTF-8.

Base64 non è cifratura

L’header sembra illeggibile, ma chiunque lo veda può recuperare la password in pochi secondi, con il decodificatore di questa pagina o con un qualsiasi decodificatore Base64. L’autenticazione Basic è accettabile solo su HTTPS, dove TLS cifra l’header durante il transito. Tieni inoltre presente che:

  • le credenziali viaggiano con ogni richiesta, quindi basta una sola richiesta HTTP in chiaro per esporle;
  • proxy, bilanciatori di carico e strumenti di debug possono registrare nei log l’header Authorization, se non sono configurati per evitarlo;
  • i browser ricordano le credenziali inserite finché non vengono chiusi, e non esiste un modo standard per disconnettersi.

Per le API pubbliche sono più adatti token API revocabili oppure OAuth. L’autenticazione Basic resta una scelta ragionevole per strumenti interni, siti di staging e chiamate da server a server su TLS.

Inviare l’header dal codice

# curl crea l'header automaticamente
curl -u 'user:password' https://api.example.com/

// fetch in JavaScript (btoa gestisce solo caratteri Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# Python requests
requests.get(url, auth=('user', 'password'))

Evita di inserire le credenziali nell’URL, come in https://user:password@host/. La RFC 3986 sconsiglia questa forma, che finisce nella cronologia del browser e nei log del server, e i browser moderni la limitano.

Domande frequenti

Come decodifico un header Basic Auth?

Incolla l’header nella sezione Decodifica un header esistente: nome utente e password compaiono subito. Qualsiasi decodificatore Base64 dà lo stesso risultato, ed è proprio per questo che l’header deve viaggiare solo su HTTPS.

La password può contenere i due punti?

Sì. Il server divide il valore decodificato al primo segno di due punti, quindi tutto ciò che segue appartiene alla password. Il nome utente, invece, non può contenere i due punti.

L’autenticazione HTTP Basic è sicura?

Su HTTPS e con una password robusta e univoca protegge le credenziali durante il transito, ma queste vengono inviate con ogni richiesta e non possono scadere come un token. Non usarla mai su HTTP in chiaro.

Perché l’accesso non riesce con password che contengono lettere accentate o caratteri non latini?
Client e server potrebbero usare codifiche dei caratteri diverse. La RFC 7617 permette al server di dichiarare charset="UTF-8"; in sua assenza, i server meno recenti potrebbero presupporre ISO-8859-1 e confrontare byte diversi.
La mia password viene inviata da qualche parte?

No. L’header viene generato da JavaScript nel tuo browser e non viene trasmesso nulla. Usa comunque credenziali di test quando condividi con altri un comando curl generato.