• 401
  • 403
  • codice di stato http
  • autorizzazione
  • autenticazione

Codice di stato HTTP 401 o 403? Come differiscono gli errori di autenticazione e autorizzazione

401 Unauthorized indica che il client non è autenticato, richiedendo credenziali valide. 403 Forbidden segnala che il client è autenticato ma non ha le autorizzazioni necessarie per accedere alla risorsa.

Guamian
Guamian
Product & Design

Ogni volta che carichi una pagina web, effettui un pagamento o accedi a un'app, c’è una conversazione invisibile che avviene tra il tuo dispositivo e un server. È un po' come inviare un messaggio e aspettare una risposta—a volte è un pollice in su, a volte è un gentile 'riprova', e occasionalmente, è un netto 'no'. Queste risposte, conosciute come codici di stato HTTP, sono gli eroi non celebrati di internet, guidando silenziosamente il flusso della comunicazione e assicurando che tutto funzioni correttamente—o almeno facendoti sapere quando non lo fa.

Cosa sono i codici di stato HTTP

I codici di stato HTTP sono come segnali in una conversazione tra un client (come il tuo browser o un'app) e un server. Forniscono aggiornamenti rapidi e chiari su ciò che è successo quando hai fatto una richiesta—se tutto è andato liscio, se qualcosa è andato storto, o se è richiesta un'azione aggiuntiva. Pensiamo a questo come a visitare una panetteria ben gestita:

200: Tutto è perfetto

Chiedi un croissant e il panettiere sorride, te lo porge e dice, "Ecco qua!" Questo è un HTTP 200 OK—la richiesta è stata completata con successo, e tutto ha funzionato come previsto.

Il codice di stato HTTP 200 OK è uno dei più comunemente utilizzati, indicando che la richiesta dal client è stata ricevuta, compresa e processata con successo dal server.

301: Ci siamo trasferiti

Arrivi alla tua panetteria preferita, ma c'è un cartello che dice, "Ci siamo trasferiti al 123 di New Street." Questo è un 301 Moved Permanently. Il server dice al tuo browser di andare automaticamente al nuovo indirizzo.

Il codice di stato HTTP 301 Moved Permanently indica che la risorsa richiesta è stata permanentemente spostata a un nuovo URL. Questo codice di stato informa il client (ad esempio, un browser o un client API) di aggiornare i suoi registri e di utilizzare il nuovo URL per future richieste.

404: Mi dispiace, non è qui

Chiedi uno scone al cioccolato e il panettiere dice, "Non li facciamo qui." Questo è un 404 Not Found—la risorsa che stai cercando non esiste sul server.

Il codice di stato HTTP 404 Not Found indica che il server non ha trovato la risorsa richiesta. Questa risposta significa che la richiesta del client era valida, ma il server non è riuscito a individuare la risorsa che era stata richiesta.

401: Chi sei?

Cerchi di entrare nella lounge VIP, ma il buttafuori ti ferma e dice, "Devi mostrare la tua tessera socio." Questo è un 401 Unauthorized—l'autenticazione è richiesta prima che tu possa accedere alla risorsa.

Il codice di stato HTTP 401 Unauthorized indica che la richiesta del client non è stata applicata perché manca di credenziali di autenticazione valide. Il server richiede al client di autenticarsi per accedere alla risorsa richiesta.

403: Non per te

Mostri la tua tessera socio, ma il buttafuori dice, "Solo i membri platinum possono entrare." Questo è un 403 Forbidden—sei autenticato ma non hai le autorizzazioni necessarie per accedere alla risorsa.

Il codice di stato HTTP 403 Forbidden indica che il server comprende la richiesta del client ma si rifiuta di soddisfarla perché il client non ha le autorizzazioni necessarie. Questo è diverso da uno stato 401 Unauthorized, in quanto il client è autenticato (o la richiesta non richiede autenticazione), ma l'accesso alla risorsa è esplicitamente negato.

500: Il forno è in fiamme

Fai un ordine, ma improvvisamente il fumo inizia a fuoriuscire dalla cucina. Il panettiere dice, "Non possiamo soddisfare il tuo ordine; qualcosa è andato storto internamente." Questo è un 500 Internal Server Error—il server ha incontrato un problema inaspettato.

Il codice di stato HTTP 500 Internal Server Error indica che il server ha incontrato una condizione inaspettata che gli ha impedito di soddisfare la richiesta. È una risposta di errore generica e non fornisce dettagli specifici su cosa è andato storto.

503: temporaneamente non disponibile

Visiti la panetteria, ma c'è un cartello "Chiuso per manutenzione." La panetteria riaprirà più tardi. Questo è un 503 Service Unavailable—il server è temporaneamente incapace di gestire la tua richiesta, spesso a causa di sovraccarico o manutenzione.

Il codice di stato HTTP 503 Service Unavailable indica che il server è temporaneamente incapace di gestire la richiesta. Questo potrebbe essere dovuto a sovraccarico del server, manutenzione, o altre condizioni temporanee. A differenza di un 500 Internal Server Error, un 503 implica che il problema si risolverà presto.

I codici di stato HTTP sono fondamentali per mantenere una comunicazione efficiente tra client e server. Informano rapidamente i client se le loro richieste sono riuscite, fallite o richiedono ulteriori azioni. Per gli sviluppatori e i professionisti IT, comprendere questi codici aiuta a risolvere problemi, progettare una migliore gestione degli errori e migliorare l'esperienza utente complessiva.

Pensali come segnali professionali e standardizzati nella continua conversazione di internet.

In questo articolo, voglio concentrarmi sugli errori 401 e 403, poiché sono strettamente legati all'autenticazione (AuthN) e all'autorizzazione (AuthZ).

Quando usare 401 Unauthorized?

401.png

Il codice di stato HTTP 401 Unauthorized è usato quando la richiesta del client richiede autenticazione, ma è mancante, non valida o è fallita. Dice al client che deve autenticarsi per accedere alla risorsa richiesta. Il legame tra autenticazione e il codice di stato 401 Unauthorized risiede nel ruolo dell'autenticazione nel determinare se una richiesta può procedere.

401 unauthorized deve includere un'intestazione WWW-Authenticate, fornendo dettagli su come autenticarsi.

Quindi, quali sono gli scenari comuni per l'uso di 401 Unauthorized?

  1. Autenticazione mancante

    La richiesta non include le credenziali di autenticazione richieste. Per esempio: viene fatta una richiesta a un endpoint API protetto senza un'intestazione Authorization.

  2. Credenziali di autenticazione non valide

    Il client fornisce credenziali, ma sono errate o non corrispondono a ciò che il server si aspetta. Per esempio, un utente invia una chiave API non valida o un token malformato.

  3. Token di autenticazione scaduto

    Il token di autenticazione è valido ma è scaduto, richiedendo al client di riautenticarsi. Per esempio, un token JWT con una data di scadenza passata (claim exp).

  4. Intestazione di autorizzazione mancante o malformata

    L'intestazione di autorizzazione è richiesta ma non è fornita o è formattata in modo errato.

  5. Schema di autenticazione non supportato

    Il server non supporta il metodo di autenticazione fornito dal client. Per esempio: Il client invia un'intestazione di autenticazione Basic, ma il server supporta solo i token Bearer.

  6. Sessione non valida o revoca del token

    La sessione dell’utente è stata invalidata, o il loro token è stato revocato. Per esempio: Un utente si disconnette, ma lo stesso token viene usato per accedere a una risorsa protetta.

Risposta esempio

Quando usare 403 Forbidden?

403.png

Il codice di stato HTTP 403 Forbidden significa che il server comprende la richiesta e l'identità del client (se autenticato) ma nega l'accesso a causa di autorizzazioni insufficienti. Segnala chiaramente, "Non ti è permesso fare questo," assicurando chiari confini di accesso e rafforzando le politiche di sicurezza.

La distinzione tra 401 Unauthorized e 403 Forbidden risiede nei loro ruoli nei contesti di autenticazione e autorizzazione.

L'autorizzazione è un meccanismo separato dall’autenticazione. Mentre l'autenticazione identifica chi sei, l'autorizzazione determina se puoi accedere a risorse specifiche e quali azioni puoi eseguire su di esse.

Per controllare la differenza dettagliata su authN e authZ. Dai un'occhiata a questi articoli seguenti.

Cos'è AuthZ

Cos'è AuthN

Quindi quali sono gli scenari comuni per l'uso di 403 Forbidden?

  1. Autenticato ma senza permesso

    Il client è loggato o autenticato ma non ha i permessi o il ruolo richiesti. Per esempio, un utente con un ruolo di "viewer" prova a cancellare un file, il che richiede privilegi di "editor".

  2. Accesso alla risorsa limitato

    L'accesso alla risorsa è intenzionalmente limitato a utenti o gruppi specifici. Per esempio: Un documento privato condiviso con utenti specifici è accesso da qualcuno non presente nella lista di accesso.

  3. Blocco IP o geografico

    L'indirizzo IP o la posizione geografica del client è bloccata dal server. Per esempio: un utente da una regione limitata prova ad accedere a un servizio che opera solo in paesi specifici.

  4. Azioni bloccate da politica

    Il client sta tentando di eseguire un'azione proibita dalle politiche o regole del server. Per esempio: un utente prova a modificare una risorsa che è contrassegnata come “sola lettura”.

  5. Risorse statiche bloccate

    Il server nega l'accesso a file o directory statiche specifiche per ragioni di sicurezza.

    Esempio: Un utente prova ad accedere a un file .htaccess o a un file di configurazione del server.

  6. Account sospeso o disabilitato

    L'account del client è disabilitato o bloccato a causa di violazioni o inattività. Ad esempio: Un utente con un account sospeso prova a loggarsi o ad accedere a risorse.

  7. L'azione richiede permessi elevati

    L'azione richiesta richiede privilegi speciali (es. admin o superutente). Ad esempio: Un utente standard prova ad accedere a endpoint riservati agli amministratori.

Risposta Esempio:

Come posso risolvere un errore 401 unauthorized

Un errore 401 indica tipicamente che l'autenticazione è necessaria ed è fallita.

Controlla credenziali

Assicurati che l’intestazione Authorization sia presente e formattata correttamente e verifica che le credenziali (chiave API, token, o password) siano corrette e non scadute. Inserire un nome utente o password sbagliati è una delle cause più frequenti di un errore 401.

Conferma metodo di autenticazione

Il server potrebbe aspettarsi un metodo di autenticazione diverso da quello fornito. Questo può accadere se il client e il server non sono allineati sul protocollo di autenticazione. Usa il metodo corretto (es. Basic, Bearer, API Key) come specificato dal server e controlla la sintassi corretta nelle intestazioni.

Ispeziona la risposta del server

Rivedi il corpo della risposta per i dettagli dell'errore e guarda nell'intestazione WWW-Authenticate per le istruzioni di autenticazione.

Verifica la richiesta

Conferma l'endpoint, i parametri di query e l'host sono corretti e assicurati che la risorsa a cui stai accedendo richieda autenticazione.

Controlla i problemi del token

Decodifica e controlla il token (es. con https://logto.io/jwt-decoder) per validità, scadenza e claim e confronta il pubblico del token (aud) con i requisiti dell'API.

Come posso risolvere un errore 403 forbidden

Un errore 403 forbidden indica tipicamente che il processo di autorizzazione è stato completato, ma l'accesso è stato negato. Per risolvere questo errore, considera le seguenti condizioni:

Verifica i permessi

Conferma che il tuo account, chiave API, o token abbia i permessi richiesti per la risorsa. Controlla se la risorsa è ristretta a ruoli o gruppi specifici.

Assicurati che l'autenticazione sia corretta

Assicurati di essere autenticato correttamente (es. con un token o credenziali validi).

Controlla due volte il metodo di autenticazione richiesto dal server.

Valida la risorsa

Conferma che la risorsa richiesta esiste e che hai accesso ad essa. Se usi API, verifica i requisiti dell'endpoint nella documentazione.

Guarda per blocchi IP o posizione

Controlla se il tuo indirizzo IP o posizione geografica è limitato dal server.

Rivedi le politiche del server

Assicurati che l'azione richiesta non violi le regole o politiche del server (es. accedere a una risorsa di sola lettura).

Ispeziona la risposta del server

Esamina il corpo della risposta per dettagli che spiegano la ragione dell'errore 403.

Può una singola richiesta restituire entrambi i codici di stato 401 e 403

No, una singola richiesta HTTP non può restituire contemporaneamente i codici di stato 401 Unauthorized e 403 Forbidden perché una risposta HTTP può includere solo un codice di stato.

L'uso pratico dei codici di errore 401 e 403 in autenticazione e autorizzazione

Nello sviluppo di applicazioni moderne, 401 Unauthorized e 403 Forbidden sono due codici di stato HTTP che gli sviluppatori incontrano frequentemente. Anche se possono sembrare simili, i loro significati e casi d'uso sono distintamente diversi. Per chiarire le loro differenze, questo articolo esplora esempi pratici di questi codici in scenari come autenticazione, autorizzazione, multi-tenant e autenticazione a più fattori (MFA).

  1. Scenario di login: Un utente prova ad accedere a una pagina protetta senza effettuare il login o fornire credenziali valide. Il server risponde e genera un errore 401 Unauthorized: "Devi effettuare il login o fornire credenziali valide per accedere a questa pagina."
  2. Scenario di controllo accessi: Lo stesso utente accede con successo ma prova a entrare in una pagina riservata agli amministratori senza il ruolo richiesto di amministratore. Il server risponde e genera un 403 Forbidden: "Sei loggato, ma non hai il permesso di accedere a questa pagina."
  3. Scenario multi-tenant: Lo stesso utente si logga ma appartiene a Tenant A e prova ad accedere a una risorsa in Tenant B, dove non ha accesso. Il server risponde e genera un 403 Forbidden: "Sei autenticato, ma non hai il permesso di accedere a questa risorsa in Tenant B."
  4. Scenario MFA: Un utente prova a loggarsi ma non ha completato l'autenticazione a più fattori (MFA) richiesta. Il server risponde e genera un errore 401 Unauthorized: "L'autenticazione è incompleta. Completa l'MFA per procedere."

Utilizzare Logto come provider di autenticazione e autorizzazione

Logto è principalmente un provider di autenticazione, offrendo i principali metodi come login senza password, email e password, MFA, SSO aziendale, e login social, tutti basati su protocolli standard aperti come OIDC, OAuth 2.0, e SAML.

Logto Cloud fornisce anche funzionalità essenziali di autorizzazione, incluso Role-Based Access Control (RBAC), Organizations (Multi-Tenancy), e Custom Token Claims per soddisfare una varietà di necessità di autorizzazione.