Segnalazione errore di autenticazione in un'API RESTful
-
06-07-2019 - |
Domanda
Sto scrivendo una piccola applicazione che espone una semplice API HTTP REST-ish. Sono bloccato nel tentativo di decidere come segnalare un errore a causa di una mancanza di autorizzazione.
L'app non ha un'API per l'autenticazione, ma dipende invece dalla presenza di un cookie contenente un token di sessione ottenuto dal client tramite un altro servizio. L'app verifica la sessione e utilizza l'identità ottenuta attraverso il processo di verifica per eseguire l'autorizzazione specifica dell'app. Non è possibile che un client esegua l'autenticazione direttamente su questa app.
Il mio problema è che l'ovvio codice di stato HTTP per il rifiuto di richieste non autorizzate, "401 non autorizzato", è specificato in termini di "WWW-Authenticate". intestazione. Vedi rfc2616 sec 10.4.2 .
La risposta DEVE includere a Campo di intestazione WWW-Authenticate (sezione 14.47) contenente una sfida applicabile alla risorsa richiesta.
Non riesco a credere che questo sia un problema non comune. È comune semplicemente sovraccaricare 401 per includere usi più generali? Che dire dei browser che aprono dialoghi di autenticazione / e (che per inciso non ho visto nei miei test, quindi forse non succede per i POST)?
In conclusione: è corretto utilizzare 401 in questo contesto o esiste una soluzione migliore?
Soluzione
In genere, si invia un 401 se il client può autenticare e risolvere il problema, ma poiché non si fornisce un modo per autenticarsi nell'API, suggerirei invece di restituire un errore 403 (vietato). Ciò non richiederà l'intestazione e indicherà al client che non è in grado di accedere al servizio.
Altri suggerimenti
Restituisce qualcosa del genere:
HTTP/1.1 401 Unauthorized
Location: https://example.com/auth-app/login