2010-08-19 5 views
12

Quindi inviare alcune intestazioni di stato diverse nella mia API tra cui 404, 409, 201, 302 e simili. Ora sto riscontrando problemi con 401 Unauthorized. Attualmente sto inviandolo se un utente non ha effettuato l'accesso (l'intera API è gestita dai diritti) o se un utente non soddisfa i requisiti di accesso specifici per la particolare risorsa da recuperare/modificare.Uno stato HTTP distinto per non connesso vs non autorizzato in un'API RESTful

Ora controllo anche il client frontend (un'applicazione jQuery/HTML) e mi piacerebbe distinguere tra i due casi per 401. C'è uno stato distinto che dovrei usare per non aver effettuato l'accesso? Il modo migliore per gestirlo è inviare il contenuto del corpo accanto all'intestazione?

+0

Domanda simile a https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses –

risposta

20

È necessario utilizzare 403 per indicare che l'utente non è autorizzato ad accedere alla risorsa. L'utilizzo di 401 indica che l'utente deve fornire le credenziali proprio come lo si sta attualmente utilizzando. Vedere le descrizioni di 401 e 403here.

3

Come dire laz, è necessario utilizzare 403 quando si è autenticato l'utente, ma l'utente non ha il permesso di fare ciò che sta chiedendo. per esempio. potresti consentire il recupero di una risorsa, ma non DELETE o PUT.

  • 401 sarebbe erronea in quanto si dice in sostanza che "Io non riconosco queste credenziali"
  • 403 è corretto in quanto si dice che "Non ti è permesso di fare questo"

In ogni caso, il corpo della risposta deve sempre contenere più informazioni, even when it's an error response. Ciò consente a un cliente una via d'uscita, si spera che passi avanti (usando collegamenti incorporati) o fornendo sufficienti informazioni su come procedere (ad es. "I miei record indicano che non si ha il permesso di cancellare XXX, si prega di contattare l'amministratore di sistema e chiedere il Permesso FOOBAR ").

+0

Non sarebbe "non hai il permesso per FOOBAR XXX"? – Hello71

+0

Il "non avere il permesso di eliminare XXX" è stato pensato come una risposta a una richiesta DELETE, quindi sì. Se offri una richiesta 403 a PUT, devi pronunciarla in modo appropriato. La cosa di FOOBAR dovrebbe aver letto "Ruolo FOOBAR". Il punto è dire all'utente come possono risolvere il problema, ma quello (progettazione del messaggio di errore) è un altro argomento! – mogsie